Map 類型不支持 streams,不過Map提供了一些新的有用的方法來處理一些日常任務。Map接口本身沒有可用的 stream()
方法,但是你可以在鍵,值上創建專門的流或者通過 map.keySet().stream()
,map.values().stream()
和map.entrySet().stream()
。
此外,Maps 支持各種新的和有用的方法來執行常見任務。
Map<Integer, String> map = new HashMap<>();
for (int i = 0; i < 10; i++) {
map.putIfAbsent(i, "val" + i);
}
map.forEach((id, val) -> System.out.println(val));//val0 val1 val2 val3 val4 val5 val6 val7 val8 val9
putIfAbsent
阻止我們在null檢查時寫入額外的代碼;forEach
接受一個 consumer 來對 map 中的每個元素操作。
此示例顯示如何使用函數在 map 上計算代碼:
map.computeIfPresent(3, (num, val) -> val + num);
map.get(3); // val33
map.computeIfPresent(9, (num, val) -> null);
map.containsKey(9); // false
map.computeIfAbsent(23, num -> "val" + num);
map.containsKey(23); // true
map.computeIfAbsent(3, num -> "bam");
map.get(3); // val33
接下來展示如何在Map裏刪除一個鍵值全都匹配的項:
map.remove(3, "val3");
map.get(3); // val33
map.remove(3, "val33");
map.get(3); // null
另外一個有用的方法:
map.getOrDefault(42, "not found"); // not found
對Map的元素做合併也變得很容易了:
map.merge(9, "val9", (value, newValue) -> value.concat(newValue));
map.get(9); // val9
map.merge(9, "concat", (value, newValue) -> value.concat(newValue));
map.get(9); // val9concat
Merge 做的事情是如果鍵名不存在則插入,否則則對原鍵對應的值做合併操作並重新插入到map中。