我有一张地图:
Map<String, Map<Integer, List<Integer>>>
e.g. Map<Name, Map<Id, List<ReferenceId>>>
Outcome:
List<Id>
List<ReferenceId>
我想把这个地图转换成两个整数列表。一个列表包含内部地图的键,另一个列表包含内部地图的值(即
List<Integer>
)。有人能告诉我如何在Java 8中使用流完成这个任务吗?
我尝试了这种方式,但出现了类型转换异常,无法将字符串转换为整数。
map.values().stream()
.map(m -> m.entrySet()
.stream()
.map(e -> e.getKey())
.collect(Collectors.toList()))
.flatMap(l -> l.stream())
.collect(Collectors.toList());
addAll
而不是重复的add
中获益,例如,ArrayList
将确保容量足够整个集合。理论上,toList
收集器可以使用中间数据结构来避免容量增加操作的成本,但今天并没有发生。同样,flatMap
可以在并行流中允许更多的并发性,但据我所知,当前实现无法做到这一点。因此,今天在收集器中完成所有操作很可能会获胜。 - Holger