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-08-08
  • 聊聊SpringBoot的@Scheduled的并发问题

    聊聊SpringBoot的@Scheduled的并发问题

    这篇文章主要介绍了聊聊SpringBoot的@Scheduled的并发问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Springboot使用RabbitMQ实现关闭超时订单(示例详解)

    Springboot使用RabbitMQ实现关闭超时订单(示例详解)

    介绍了如何在Spring Boot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和绑定关系,以及编写监听方法,实现了订单数据的发送和延时消费,感兴趣的朋友一起看看吧
    2025-01-01
  • SpringCloud 微服务数据权限控制的实现

    SpringCloud 微服务数据权限控制的实现

    这篇文章主要介绍的是权限控制的数据权限层面,意思是控制可访问数据资源的数量,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • mybatis-xml映射文件及mybatis动态sql详解

    mybatis-xml映射文件及mybatis动态sql详解

    XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名),这篇文章主要介绍了mybatis-xml映射文件及mybatis动态sql的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • Java中List遍历删除元素remove()的方法

    Java中List遍历删除元素remove()的方法

    这篇文章主要介绍了Java中List遍历删除元素remove()的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • SpringBoot大事务问题的常用优化方案

    SpringBoot大事务问题的常用优化方案

    大事务是指运行时间比较长,操作的数据比较多的事务123,大事务的产生原因包括操作的数据比较多、大量的锁竞争、事务中有其他非数据库的耗时操作等,本文给大家总结了SpringBoot大事务问题的常用优化方案,需要的朋友可以参考下
    2024-04-04
  • springboot普通类中如何获取session问题

    springboot普通类中如何获取session问题

    这篇文章主要介绍了springboot普通类中如何获取session问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Token过期实现自动续期的方法步骤

    Token过期实现自动续期的方法步骤

    本文详细解析了Token在防止表单重复提交、身份验证及过期处理中的应用,涵盖Token的生成流程、过期机制及续期方案,特别介绍了单token与双token两种策略,需要的朋友可以参考下
    2026-05-05
  • SpringBoot自定义Starter与自动配置实现方法详解

    SpringBoot自定义Starter与自动配置实现方法详解

    在Spring Boot官网为了简化我们的开发,已经提供了非常多场景的Starter来为我们使用,即便如此,也无法全面的满足我们实际工作中的开发场景,这时我们就需要自定义实现定制化的Starter
    2023-02-02

最新评论