java将返回类型强制为泛型类型,而不是对象类型,以便使用收集器和流构建映射
我正试图从java将返回类型强制为泛型类型,而不是对象类型,以便使用收集器和流构建映射,java,generics,java-stream,collectors,Java,Generics,Java Stream,Collectors,我正试图从列表对构建映射。但我面临的问题是,它给出的错误是类型不匹配:无法从Map转换为Map 我应该如何强制返回Map List pairs=lines.stream().map(line->{ String[]split=line.split(“:”); List dest=列表 .newArrayList(Splitter.on(“,”).trimResults().ompiteEmptyStrings().splitToList(split[1]); GraphNode节点=新Graph
列表
对构建映射
。但我面临的问题是,它给出的错误是类型不匹配:无法从Map
转换为Map
我应该如何强制返回Map
List pairs=lines.stream().map(line->{
String[]split=line.split(“:”);
List dest=列表
.newArrayList(Splitter.on(“,”).trimResults().ompiteEmptyStrings().splitToList(split[1]);
GraphNode节点=新GraphNode(拆分[0]。toCharArray()[0]);
返回新的javafx.util.Pair(node,dest);
}).collect(Collectors.toList());
Map graphMap=pairs.stream().Map(pair->pair.getKey())
.collect(Collectors.toMap(GraphNode::getData,pair->pair));
由于您的类具有字符
类型(GraphNode
),因此我认为GraphNode::getData
也返回字符
相关类型
但是您在Map
中将其分配给String
,因此会出现类型不匹配
解决方法是将
GraphNode::getData
映射到String您的map
步骤是错误的,因为您正在丢弃列表中的数据(即对
的值部分),我假设您希望将其放在输出映射中。我建议使用flatMap
将流
转换为流
。从那里,获得地图
是件小事
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));
地图图形地图=
pairs.stream()
.flatMap(pair->pair.getValue().stream().map(s->newjavafx.util.pair(pair.getKey(),s)))
.collect(Collectors.toMap(Pair::getValue,Pair::getKey));
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));