Java8-Map-新增方法
在 Java 8 中的 Map.Entry 接口中增加了 comparingByKey, comparingByValue 方法,它们都返回 Comparator<Map.Entry<K,V>>
, Comparator 是一个函数接口,主要是方便 Lambda 表达式的使用。
在 Java 8 中的 Map 接口增加了一些 default 方法,提升了对 key,value 操作的便利性。下面是基本数据的定义,通过这些数据说明新增的一些方法。
1 | Map<Integer, String> map = new HashMap<>(); |
getOrDefault 方法
如果指定的 key 存在,则返回该 key 对应的 value,如果不存在,则返回指定的值。例子如下
1 | // key为4不存在,输出 d |
forEach 方法
遍历 Map 中的所有 Entry, 对 key, value 进行处理, 接收参数 (K, V) -> void, 例子如下
1 | // 输出1a, 2b, 3c |
replaceAll 方法
替换 Map 中所有 Entry 的 value 值,这个值由旧的 key 和 value 计算得出,接收参数 (K, V) -> V
, 类似如下代码
1 | for (Map.Entry<K, V> entry : map.entrySet()) |
例如如下:
1 | map.replaceAll((key, value) -> (key + 1) + value); |
putIfAbsent 方法
如果 key 关联的 value 不存在,则关联新的 value 值,返回 key 关联的旧的值,类似如下代码
1 | V v = map.get(key); |
示例代码如下:
1 | map.putIfAbsent(3, "d"); |
remove 方法
接收 2 个参数,key 和 value,如果 key 关联的 value 值与指定的 value 值相等(equals),则删除这个元素,类似代码如下:
1 | if (map.containsKey(key) && Objects.equals(map.get(key), value)) { |
示例代码如下:
1 | map.remove(1, "b"); |
replace(K key, V oldValue, V newValue) 方法
如果 key 关联的值与指定的 oldValue 的值相等,则替换成新的 newValue,类似代码如下:
1 | if (map.containsKey(key) && Objects.equals(map.get(key), value)) { |
示例代码如下
1 | map.replace(3, "a", "z"); |
replace(K key, V value) 方法
如果 map 中存在 key,则替换成 value 值,否则返回 null, 类似代码如下:
1 | if (map.containsKey(key)) { |
示例代码如下:
1 | // 输出旧的值, a |
computeIfAbsent 方法
如果指定的 key 不存在,则通过指定的 K -> V
计算出新的值设置为 key 的值,类似代码如下:
1 | if (map.get(key) == null) { |
示例代码如下:
1 | map.computeIfAbsent(1, key -> key + " computed"); |
computeIfPresent 方法
如果指定的 key 存在,则根据旧的 key 和 value 计算新的值 newValue, 如果 newValue 不为 null,则设置 key 新的值为 newValue, 如果 newValue 为 null, 则删除该 key 的值,类似代码如下:
1 | if (map.get(key) != null) { |
示例代码如下:
1 | map.computeIfPresent(1, (key, value) -> (key + 1) + value); |
compute 方法
compute 方法是 computeIfAbsent 与 computeIfPresent 的综合体。
merge 方法
构造
1 | merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) |
如果指定的 key 不存在,则设置指定的 value 值,否则根据 key 的旧的值 oldvalue,value 计算出新的值 newValue, 如果 newValue 为 null, 则删除该 key,否则设置 key 的新值 newValue。类似如下代码:
1 | V oldValue = map.get(key); |
示例代码如下:
1 | // 存在key为1, 输出 a merge |