Java8新特性之Maps的一些新增方法

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中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章