考慮下面的映射聲明如何收集地圖鍵值到一個列表
我想用一個單一的數據流,以收集所有的按鍵和所有的值連成一個單一的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