如何将映射键值收集到列表中

时间:2016-07-26 17:58:08

标签: java lambda java-stream

给出以下地图声明

Map<Integer, Integer> map;

我想使用单个流将所有键和所有值一起收集到一个List<Integer>中,该流只迭代地图的条目一次。

到目前为止,我只是设法使用两个独立的流迭代来做到这一点;一个用于键,一个用于值。

可以一次完成吗?

3 个答案:

答案 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());