Java 使用lambda語法將List<Map<K, V>>
合併為一個Map<K, V>
。
例如下面把的List<Map<Integer, String>>
轉成單一個Map<Integer, String>
。
Map<Integer, String> m1 = new HashMap<>();
m1.put(1, "A");
m1.put(2, "B");
m1.put(3, "C");
Map<Integer, String> m2 = new HashMap<>();
m2.put(3, "CC");
m2.put(4, "D");
m2.put(5, "E");
m2.put(6, "F");
List<Map<Integer, String>> mapList = Arrays.asList(m1, m2);
Map<Integer,String> mergedMap = mapList.stream()
.flatMap(map -> map.entrySet().stream()) // 返回Stream<Set<Map.Entry<Integer, String>>>
.collect(Collectors.toMap(
Map.Entry::getKey, // (entry) -> ((Map.Entry<Integer, String>) entry).getKey()
Map.Entry::getValue, // (entry) -> ((Map.Entry<Integer, String>) entry).getValue(),
(v1, v2) -> v1 + v2)); // 決定相同key的元素值如何合併,例如m1中的{3="C"}及m2中的{3="CC"}
mergedMap.forEach((k, v) -> {
System.out.println("k:" + k + ", v:" + v);
});
印出如下。
k:1, v:A
k:2, v:B
k:3, v:CCC
k:4, v:D
k:5, v:E
k:6, v:F
參考:
沒有留言:
張貼留言