Java中Map.merge()方法使用示例详解

 更新时间:2023年08月16日 16:21:34   作者:吴名氏.  
这篇文章主要介绍了Map.merge()方法使用和介绍,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1 简介

JDK8中新增了Map.merge()方法,但是之前没有用过。merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)。

  • key:map的key
  • value:使用者传入的值
  • remappingFunction:BiFunction函数式接口

当map中不存在指定的key时,便将传入的value设置为key的值,相当于map.put(key, value);当key存在值时,执行一个方法该方法接收key的旧值和传入的value,执行自定义的方法返回最终结果设置为key的值。

2 源码

default V merge(K key, V value,
            BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
        Objects.requireNonNull(remappingFunction);
        Objects.requireNonNull(value);
        V oldValue = get(key);
        V newValue = (oldValue == null) ? value :
                   remappingFunction.apply(oldValue, value);
        if(newValue == null) {
            remove(key);
        } else {
            put(key, newValue);
        }
        return newValue;
    }

3 实例

3.1 简单实例

/**
     * 简单实例
     */
    @Test
    public void someTest01() {
        Map<String, Integer> map = new HashMap<>();
        map.put("key1", 10);
        map.put("key2", 20);
        // 当key存在时,进行old+value;当key不存在时,将key的值设置为1
        map.merge("key", 1, Integer::sum);
        // 当key1存在时,进行old+value;当key1不存在时,将key1的值设置为20
        map.merge("key1", 20, Integer::sum);
        map.forEach((k, v) -> System.out.println("k:" + k + "---" + "v:" + v));
    }
    // ------------------------------------------------------------------
    // 打印结果
    k:key1---v:30
    k:key2---v:20
    k:key---v:1

3.2 开发实例

@Data
public class Student {
    /**
     * 学生姓名
     */
    private String studentName;
    /**
     * 学科
     */
    private String subject;
    /**
     * 分数
     */
    private Integer score;
    public Student(String studentName, String subject, Integer score) {
        this.studentName = studentName;
        this.subject = subject;
        this.score = score;
    }
}
// ------------------------------------------------------------------
    /**
     * 统计学生成绩
     */
    @Test
    public void someTest02() {
        List<Student> students = Arrays.asList(
                new Student("yoni", "English", 80),
                new Student("yoni", "Chiness", 98),
                new Student("yoni", "Math", 95),
                new Student("taohai.wang", "English", 50),
                new Student("taohai.wang", "Chiness", 72),
                new Student("taohai.wang", "Math", 41),
                new Student("Seely", "English", 88),
                new Student("Seely", "Chiness", 89),
                new Student("Seely", "Math", 92)
        );
        Map<String, Integer> scoreMap = new HashMap<>();
        students.forEach(student -> scoreMap.merge(student.getStudentName(), student.getScore(), Integer::sum));
        scoreMap.forEach((k, v) -> System.out.println("key:" + k + "---" + "value:" + v));
    }
// ------------------------------------------------------------------
// 运行结果
姓名:Seely---成绩:269
姓名:taohai.wang---成绩:163
姓名:yoni---成绩:273

到此这篇关于Map.merge()方法使用和介绍的文章就介绍到这了,更多相关Map.merge()方法使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 浅析Java虚拟机详解之概述、对象生存法则

    浅析Java虚拟机详解之概述、对象生存法则

    这篇文章主要介绍了Java虚拟机详解之概述、对象生存法则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java Spring框架的概述

    Java Spring框架的概述

    这篇文章主要为大家介绍了Java Spring框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 浅谈java获取服务器基本信息

    浅谈java获取服务器基本信息

    这篇文章主要介绍了java获取服务器基本信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解Java生成PDF文档方法

    详解Java生成PDF文档方法

    这篇文章主要介绍了Java生成PDF文档方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MyBatis resultMap id标签的错误使用方式

    MyBatis resultMap id标签的错误使用方式

    这篇文章主要介绍了MyBatis resultMap id标签的错误使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 谈谈 Java 中 this 的使用方法

    谈谈 Java 中 this 的使用方法

    这篇文章主要介绍了Java 中 this 的使用方法,需要的朋友可以参考下
    2014-01-01
  • Java两个乒乓球队比赛名单问题(判断素数)

    Java两个乒乓球队比赛名单问题(判断素数)

    两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
    2017-02-02
  • Java集合的Collection接口和List接口详解

    Java集合的Collection接口和List接口详解

    这篇文章主要为大家详细介绍了Java集合的Collection接口和List接口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Java编程通过list接口实现数据的增删改查代码示例

    Java编程通过list接口实现数据的增删改查代码示例

    这篇文章是介绍Java编程基础方面的内容,涉及list接口的操作,通过list接口实现对数据的增删改查的相关代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • springboot使用消息中间件

    springboot使用消息中间件

    这篇文章主要介绍了springboot使用消息中间件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论