繁体   English   中英

Java将返回类型强制为通用类型,而不是对象类型,以使用收集器和流构造映射

[英]java enforcing the return type to generic types instead of Object types for constructing map using collectors and streams

我正在尝试从List<Pair<GraphNode<Character>, List<String>>>对构造Map<String, GraphNode<Character>> 但是我面临的问题是它给出了错误信息,说明类型不匹配:无法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));

您的map步骤是错误的,因为您要丢弃List<String>Pair的值部分)中的数据,我假设您想将其包含在输出映射中。 我建议使用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));

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

但是你分配它StringMap<String, GraphNode<Character>>所以类型不匹配的发生。

解决方案是将GraphNode::getData映射到String

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM