得益于 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。 阅读全文 >>