java强制返回类型为泛型类型而不是使用收集器和流构造映射的Object类型

时间:2018-05-04 08:26:53

标签: java generics java-stream collectors

我正在尝试从Map<String, GraphNode<Character>>对构建List<Pair<GraphNode<Character>, List<String>>>。但我遇到的问题是它提出的错误是类型不匹配:无法将Map<Object,Object>转换为Map<String,GraphNode<Character>>

我应该如何强制退回Map<String,GraphNode<Character>>

List<Pair<GraphNode<Character>, List<String>>> pairs = lines.stream().map(line -> {
            String[] split = line.split(":");
            List<String> dest = Lists
                    .newArrayList(Splitter.on(",").trimResults().omitEmptyStrings().splitToList(split[1]));
            GraphNode<Character> node = new GraphNode<>(split[0].toCharArray()[0]);
            return new javafx.util.Pair<GraphNode<Character>, List<String>>(node, dest);
        }).collect(Collectors.toList());
Map<String, GraphNode<Character>> graphMap = pairs.stream().map(pair -> pair.getKey())
                    .collect(Collectors.toMap(GraphNode::getData, pair -> pair));

2 个答案:

答案 0 :(得分:2)

您的map步骤错误,因为您要丢弃List<String>Pair s的值部分)中的数据,我假设您想要进入输出图。我建议使用flatMapStream<Pair<GraphNode<Character>, List<String>>>转换为Stream<Pair<GraphNode<Character>, ListString>>。从那里获得Map<String, GraphNode<Character>>是微不足道的。

Map<String, GraphNode<Character>> graphMap =
    pairs.stream()
         .flatMap(pair->pair.getValue().stream().map(s -> new javafx.util.Pair<GraphNode<Character>, String>(pair.getKey(), s)))
         .collect(Collectors.toMap(Pair::getValue,Pair::getKey));

答案 1 :(得分:1)

由于您的课程有Character类型(GraphNode<Character>),因此我认为GraphNode::getData也会返回Character相关类型。

但您已将其分配到String中的Map<String, GraphNode<Character>>,因此会出现类型不匹配。

分辨率是将GraphNode::getData映射到String