给出以下地图声明
Map<Integer, Integer> map;
我想使用单个流将所有键和所有值一起收集到一个List<Integer>
中,该流只迭代地图的条目一次。
到目前为止,我只是设法使用两个独立的流迭代来做到这一点;一个用于键,一个用于值。
可以一次完成吗?
答案 0 :(得分:4)
试试这个:
List<Integer> numbers = map.entrySet().stream()
.flatMap(e -> Stream.of(e.getKey(), e.getValue()))
.collect(Collectors.toList());
答案 1 :(得分:3)
Map.entrySet().stream().flatMap(...)
应该为你做。每个Entry
都有getKey()
和getValue()
,因此您应该能够将这些内容组合成flatMap
lambda中的2长度流,然后将其全部包含在列表中收集器。
或者,请查看使用.entrySet().reduce()
按元素构建列表元素。
答案 2 :(得分:0)
假设你有一个函数Integer t(K key, V value)
,
map.entrySet()
.stream()
.map(entry -> t(entry.key, entry.value))
.collect(Collectors.toList());