美文网首页
java 8 hashMap新增方法

java 8 hashMap新增方法

作者: 吃花生的小猴子 | 来源:发表于2017-11-29 18:09 被阅读0次

    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<K,V> 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<K,V> 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<K,V> 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<? super K, ? extends V> mappingFunction)

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

            
            Map<String ,Integer> 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<? super K, ? super V, ? extends V> remappingFunction)

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

            Map<String ,Integer> 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<? super K, ? super V, ? extends V> remappingFunction)

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

            Map<String ,Integer> 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<? super V, ? super V, ? extends V> remappingFunction)

    合并map

    • value 为null 报NPE
    • 如果key存在,且value 不为null,新,老value根据计算得出结果,赋值给key。
    • 如果key不存在,且value 不为null,value赋值给key。
            Map<String ,Integer> 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新增方法

          本文链接:https://www.haomeiwen.com/subject/jtoubxtx.html