考虑下面的映射声明如何收集地图键值到一个列表
我想用一个单一的数据流,以收集所有的按键和所有的值连成一个单一的List<Integer>
是通过迭代地图的条目只是一次。
到目前为止,我只设法做到这一点,使用两个单独的流迭代;一个用于键和一个用于值。
它可以一次完成吗?
考虑下面的映射声明如何收集地图键值到一个列表
我想用一个单一的数据流,以收集所有的按键和所有的值连成一个单一的List<Integer>
是通过迭代地图的条目只是一次。
到目前为止,我只设法做到这一点,使用两个单独的流迭代;一个用于键和一个用于值。
它可以一次完成吗?
试试这个:
List<Integer> numbers = map.entrySet().stream()
.flatMap(e -> Stream.of(e.getKey(), e.getValue()))
.collect(Collectors.toList());
Map.entrySet().stream().flatMap(...)
应该为你做。每个Entry
都有getKey()
和getValue()
,所以你应该可以在flatMap
lambda中将它们组合成2长度的流,然后将它们全部用列表收集器包装起来。
或者,请使用.entrySet().reduce()
来逐个构建列表元素。
假设你有一个函数Integer t(K key, V value)
,
map.entrySet()
.stream()
.map(entry -> t(entry.key, entry.value))
.collect(Collectors.toList());
键 - 值对可作为一个'设置>''通过地图:: entrySet'。 'Set'是一个'Collection',所以你可以'流'它,但你也可以简单地使用'List :: addAll'来将'Set'的内容添加到'List'。 –
njzk2