# Map
正如前面已經提到的那樣,map是不支持流操作的。而更新后的map現在則支持多種實用的新方法,來完成常規的任務。
```
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));
```
上面的代碼風格是完全自解釋的:putIfAbsent避免我們將null寫入;forEach接受一個消費者對象,從而將操作實施到每一個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
```
接下來,我們將學習,當給定一個key值時,如何把一個實例從對應的key中移除:
```
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
```
合并操作先看map中是否沒有特定的key/value存在,如果是,則把key/value存入map,否則merging函數就會被調用,對現有的數值進行修改。