java将返回类型强制为泛型类型,而不是对象类型,以便使用收集器和流构建映射
我正在尝试从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));
# 1 楼答案
因为您的类有
Character
类型(GraphNode<Character>
),所以我认为GraphNode::getData
也会返回Character
相关类型但是您在
Map<String, GraphNode<Character>>
中将其分配给了String
,因此会出现类型不匹配解决方案是将
GraphNode::getData
映射到字符串# 2 楼答案
您的
map
步骤是错误的,因为您正在丢弃List<String>
(即Pair
的值部分)中的数据,我假设您希望该数据位于输出映射中。我建议使用flatMap
将Stream<Pair<GraphNode<Character>, List<String>>>
转换为Stream<Pair<GraphNode<Character>, ListString>>
。从那里,得到一个Map<String, GraphNode<Character>>
是微不足道的