Java 8 Map相关知识

2019-11-21  本文已影响0人  河东鲁达

在Java8里,Map类型不支持stream,不过Map提供了一些新的有用的方法来处理一些日常任务。

getOrDefault

如果指定的key存在,则返回该key对应的value;
如果不存在,则返回指定的值;

        System.out.println(map.getOrDefault("d","ddd"));
        // key为d不存在,输出ddd

forEach

forEach接收一个BiConsumer接口(lambda表达式)来对map里的每一个键值对进行操作,BiConsumer接口的两个参数依次为key和val。

map.forEach((id, val) -> System.out.println(val));

put

不管存不存在key,都设值。
返回旧值,如果没有则返回null。

        Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        String v = map.put("b","v"); 
        System.out.println(v);// 输出 B
        String v1 = map.put("c","v");
        System.out.println(v1); // 输出:NULL

compute

相当于put,只不过返回的是新值;
当key不存在时,执行value计算方法,计算value;

        Map<String, String> map = new HashMap<>();
        map.put("a", "A");
        map.put("b", "B");
        String val = map.compute("b", (k, v) -> "v"); 
        System.out.println(val);// 输出 v
        String v1 = map.compute("c", (k, v) -> "v"); 
        System.out.println(v1);// 输出 v

putIfAbsent

putIfAbsent返回旧值,如果没有则返回null;
先计算value,再判断key是否存在;

        Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        String v = map.putIfAbsent("b","v"); 
        System.out.println(v); // 输出 B
        String v1 = map.putIfAbsent("c","v"); 
        System.out.println(v1); // 输出 null
        System.out.println(JSON.toJSON(map));
        // 输出 {"a":"A","b":"B","c":"v"}

computeIfAbsent

存在时返回存在的值,不存在时返回新值;
参数为:key,Function<key,value>(value计算方法);
当key不存在时,执行value计算方法,计算value;

        Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        String v = map.computeIfAbsent("b",k->"v");
        System.out.println(v);// 输出 B
        String v1 = map.computeIfAbsent("c",k->"v");
        System.out.println(v1); // 输出 v
        System.out.println(JSON.toJSON(map));
        // 输出 {"a":"A","b":"B","c":"v"}

computeIfPresent

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

        Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        map.put("c","C");
        String v = map.computeIfPresent("b",(key, value)->null);
        System.out.println(v);// 输出 null
        String v1 = map.computeIfPresent("c",(key, value)->"v");
        System.out.println(v1); // 输出 v
        String v2 = map.computeIfPresent("d",(key, value)->"d");
        System.out.println(v2); // 输出 null
        System.out.println(JSON.toJSON(map));
        // 输出 {"a":"A","c":"v"}

replace(K key, V value)

如果map中存在key,则替换成value值,否则返回null;

        Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        String v = map.replace("b","b");
        System.out.println(v);// 输出 B
        String v1 = map.replace("c","c");
        System.out.println(v1); // 输出 null
        System.out.println(JSON.toJSON(map));
        // 输出 {"a":"A","b":"b"}

replace(K key, V oldValue, V newValue)

如果key关联的值与指定的oldValue的值相等,则替换成新的newValue返回true,否则不替换返回false;

        Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        Boolean v = map.replace("a","a","aa");
        System.out.println(v);// 输出 false
        Boolean v1 = map.replace("b","B","BB");
        System.out.println(v1);// 输出 true
        Boolean v2 = map.replace("c","c","C");
        System.out.println(v2); // 输出 false
        Boolean v3 = map.replace("d",null,"D");
        System.out.println(v3); // 输出 false
        System.out.println(JSON.toJSON(map));
        // 输出 {"a":"A","b":"BB"}

replaceAll

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

       Map<String, String> map = new HashMap<>();
        map.put("a","A");
        map.put("b","B");
        map.put("c","C");
        map.replaceAll((k,v)->k+v);
        System.out.println(JSON.toJSON(map));
        // 输出 {"a":"aA","b":"bB","c":"cC"}

remove

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

上一篇 下一篇

猜你喜欢

热点阅读