首页 > 解决方案 > java将返回类型强制为泛型类型,而不是使用收集器和流构造映射的对象类型

问题描述

我正在尝试Map<String, GraphNode<Character>>List<Pair<GraphNode<Character>, List<String>>>对构建。但我面临的问题是它给出错误说Type mismatch: cannot convert from Map<Object,Object>to 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));

标签: javagenericsjava-streamcollectors

解决方案


您的map步骤是错误的,因为您正在丢弃List<String>(s 的值部分Pair)中的数据,我假设您希望在输出映射中。我建议使用flatMap将 转换Stream<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));

推荐阅读