Java 8 新增 Map 方法使用記錄
得益於 Java 8 的 default 方法特性,Java 8 對 Map 增加了不少實用的預設方法,像 getOrDefault
, forEach
, replace
, replaceAll
, putIfAbsent
, remove(key, value)
, computeIfPresent
, computeIfAbsent
, compute
和merge
方法。另外與 Map 相關的 Map.Entry
也新加了多個版本的 comparingByKey
和 comparingByValue
方法。
為達到熟練運用上述除 getOrDefault
和 forEach
外的其他方法,有必要逐一體驗一番,如何呼叫,返回值以及呼叫後的效果如何。看看每個方法不至於 Java 8 那麼多年還總是 if(map.containsKey(key))...
注:Map 新增方法對 present 的判斷是 map.containsKey(key) && map.get(key) != null,簡單就是 map.get(key) != null,也就是即使 key 存在,但對應的值為 null 的話也視為 absent。absent 就是 map.get(key) == null。 不同 Map 實現對 key/value 是否能為 null 有不同的約束, HashMap, LinkedHashMap, key 和 value 都可以為 null 值,TreeMap 的 key 為不能為 null, 但 value 可以為 null, 而 Hashtable, ConcurrentMap 則 key 和 value 都不同為 null。一句話 absent/present 的判斷是 map.get(key) 是否為 null。