• 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));
    
    
  • 相关阅读:
    C# 杨辉三角 下
    C# 自动走迷宫 下
    算法练习之1数字填充 下
    动态添加控件并获取其值
    两个ListBox的互动
    VS2005常用快捷键
    GridView内嵌DropDownList操作
    GridView格式化短日期
    获得客户端ID
    Access数据库 Update 语句的怪现象
  • 原文地址:https://www.cnblogs.com/AganRun/p/11816047.html
Copyright © 2020-2023  润新知