Java8_map新增方法

参考博客

https://irusist.github.io/2016/01/04/Java-8%E4%B9%8BMap%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95/#getOrDefault-%E6%96%B9%E6%B3%95

default方法

map.put(1, "a");
map.put(2, "b");

getOrDefault方法

如果指定的key存在,返回value,不存在,返回指定的值

System.out.pringln(map.getOrDefaullt(4, "d"))

forEach方法

遍历Map中的所有Entry, 对key, value进行处理

// 输出1a, 2b, 3c
map.forEach((key, value) -> System.out.println(key + value));

replaceAll方法

替换Map中所有Entry的value值,这个值由旧的key和value计算得出,接收参数 (K, V) -> V, 类似如下代码

map.replaceAll((key, value) -> (key + 1) + value);
// 输出 12a 23b 34c
map.forEach((key, value) -> System.out.println(key + value));

putIfAbsent 方法

如果key关联的value不存在,则关联新的value值,返回key关联的旧的值

相当于


V v = map.get(key);
if (v == null)
    v = map.put(key, value);

return v;

remove 方法

接收2个参数,key和value,如果key关联的value值与指定的value值相等(equals),则删除这个元素

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
    map.remove(key);
    return true;
} else
    return false;

replace(K key, V oldValue, V newValue) 方法

如果key关联的值与指定的oldValue的值相等,则替换成新的newValue

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
    map.put(key, newValue);
    return true;
} else
    return false;

replace(K key, V value) 方法

if (map.containsKey(key)) {
    return map.put(key, value);
} else
    return null;

computeIfAbsent 方法

如果指定的key不存在,则通过指定的K -> V计算出新的值设置为key的值

if (map.get(key) == null) {
    V newValue = mappingFunction.apply(key);
    if (newValue != null)
        map.put(key, newValue);
}

栗子:

map.computeIfAbsent(1, key -> key + " computed");
// 存在key为1,则不进行计算,输出值 a
System.out.println(map.get(1));

map.computeIfAbsent(4, key -> key + " computed");
// 不存在key为4,则进行计算,输出值 4 computed
System.out.println(map.get(4));

computeIfPresent 方法

如果指定的key存在,则根据旧的key和value计算新的值newValue,
如果newValue不为null,则设置key新的值为newValue,
如果newValue为null,则删除该key的值

if (map.get(key) != null) {
    V oldValue = map.get(key);
    V newValue = remappingFunction.apply(key, oldValue);
    if (newValue != null)
        map.put(key, newValue);
    else
        map.remove(key);
}

eg:

map.computeIfPresent(1, (key, value) -> (key + 1) + value);
// 存在key为1, 则根据旧的key和value计算新的值,输出 2a
System.out.println(map.get(1));

map.computeIfPresent(2, (key, value) -> null);
// 存在key为2, 根据旧的key和value计算得到null,删除该值,输出 null
System.out.println(map.get(2));

merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) 方法

如果指定的key不存在,则设置指定的value值,
否则根据key的旧的值oldvalue,value计算出新的值newValue,
如果newValue为null,
则删除该key,否则设置key的新值newValue。类似如下代码

V oldValue = map.get(key);
V newValue = (oldValue == null) ? value :
        remappingFunction.apply(oldValue, value);
if (newValue == null)
    map.remove(key);
else
    map.put(key, newValue);

eg:

// 存在key为1, 输出 a merge
System.out.println(map.merge(1, " merge", (oldValue, newValue) -> oldValue + newValue));
// 新值为null,删除key,输出 null
System.out.println(map.merge(1, " merge", (oldValue, newValue) -> null));
// 输出 " merge"
System.out.println(map.merge(4, " merge", (oldValue, newValue) -> oldValue + newValue));

posted @ 2019-11-07 22:08  浮梦  阅读(841)  评论(0编辑  收藏  举报