java 8 hashMap新增方法

replace

把newValue替换oldValue.

  • replace(K key, V oldValue, V newValue) 判断oldValue是否正确
  • replace(K key, V value)
  • 用map的put(相同的key)也能做到newValue替换oldValue,但是replace走的是get获取的流程,获取不到就直接返回false。-- replace 所在场景一般是key存在的
   @Override
    public boolean replace(K key, V oldValue, V newValue) {
        Node e; V v;
        if ((e = getNode(hash(key), key)) != null &&
            ((v = e.value) == oldValue || (v != null && v.equals(oldValue)))) {
            e.value = newValue;
            afterNodeAccess(e);
            return true;
        }
        return false;
    }

    @Override
    public V replace(K key, V value) {
        Node e;
        if ((e = getNode(hash(key), key)) != null) {
            V oldValue = e.value;
            e.value = value;
            afterNodeAccess(e);
            return oldValue;
        }
        return null;
    }

getOrDefault (Object key, V defaultValue)

根据key获取value, 如果value为空则返回defaultValue

   @Override
    public V getOrDefault(Object key, V defaultValue) {
        Node e;
        return (e = getNode(hash(key), key)) == null ? defaultValue : e.value;
    }

remove(Object key, Object value)

根据key和value 删除

   @Override
    public boolean remove(Object key, Object value) {
        return removeNode(hash(key), key, value, true, true) != null;
    }

computeIfAbsent(K key,Function mappingFunction)

映射当key不存在或value为null时的value值,包括创建对应key,返回value,如果key存在,则不做处理,例:

        
        Map map = new HashMap<>();
        map.put("a",1);

        int result = map.computeIfAbsent("a1", (v) -> 90);

        System.out.println(map.get("a1"));
        System.out.println(result);

        int av = map.computeIfAbsent("a", (v) -> 90);
        System.out.println(av);

      结果:
            90
            90
            1

computeIfPresent(K key, BiFunction remappingFunction)

与上述的computeIfAbsent 相反,当key存在时计算替换相应的value,并返回。当key不存在时报NPE,例:

        Map map = new HashMap<>();
        map.put("a",1);
        
        int aValue = map.computeIfPresent("a" ,(k,v) -> 21 + v);
        System.out.println(aValue);

      结果:
           21

compute(K key, BiFunction remappingFunction)

也是计算key的value,如果key不存在,则创建key并复制value,如果value为null,则报NPE,例:

        Map map = new HashMap<>();
        map.put("a",1);

        int result = map.compute("a1", (k,v) -> 91);

        System.out.println(map.get("a1"));
        System.out.println(result);

        int av = map.compute("a", (k,v) -> 92);
        System.out.println(av);

        int anull = map.compute("a", (k,v) -> null);
        System.out.println(anull);

如果:
   91
   91
   92
Exception in thread "main" java.lang.NullPointerException

merge(K key, V value,BiFunction remappingFunction)

合并map

  • value 为null 报NPE
  • 如果key存在,且value 不为null,新,老value根据计算得出结果,赋值给key。
  • 如果key不存在,且value 不为null,value赋值给key。
        Map map = new HashMap<>();
        map.put("a",1);

        map.merge("a", 21,(a,b) -> a + b);
        System.out.println(map.get("a"));


        map.merge("a1", 22,(a,b) -> a + b);
        System.out.println(map.get("a1"));


        map.merge("a2", null,(a,b) -> a + b);
        System.out.println(map.get("a2"));

结果:
      22
      22
Exception in thread "main" java.lang.NullPointerException

你可能感兴趣的:(java 8 hashMap新增方法)