美文网首页
Java 8 Map相关知识

Java 8 Map相关知识

作者: 河东鲁达 | 来源:发表于2019-11-21 17:42 被阅读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),则删除这个元素;

相关文章

  • Java 8 Map相关知识

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

  • 我用的java8

    list to Map (java 8) 分组, 计数 排序 java 8 分区

  • Java Collections Framework 源码分析(

    Map 在 Java Collections Framework 中设计相关知识点比较多的数据结构,无论是工作还是...

  • java知识点

    JAVA的基础知识:数据结构(Map / List / Set等)、设计模式、算法、线程相关、IO/NIO、序列化...

  • Java8 map****和****reduce

    Java8 map****和****reduce map 结果:[2, 4, 6, 8] 也可以搞成其他的类型,初...

  • (转)学习Java8数据流List转为Map、分组、统计等操作集

    转:Java8数据流 分享:Java8集合排序 Java8java8--List转为Map、分组、统计等操作

  • 记录学习资料

    ## java相关 1.看懂jvm的类装载系统 数据库相关 1.Mysql索引优化 k8s相关知识 1.k8s集群...

  • 集合类(三)

    Java 8中Map相关的红黑树的引用背景、原理 HashMap的容量、扩容 很多人在通过阅读源码的方式学习Jav...

  • GO语言

    map相关操作整理 知识点整理: 创建 make(map[string]string) 获取元素 m[key] k...

  • Java 关于集合

    Java的集合有两大类:Collection和Map,相关关系如下图: 根据上图可知Collection和Map是...

网友评论

      本文标题:Java 8 Map相关知识

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