Java中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的Spring框架中bean的继承与内部bean的注入
这篇文章主要介绍了Java的Spring框架中bean的继承与内部bean的注入,Spring框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下2015-12-12RabbitMQ的Direct Exchange模式实现的消息发布案例(示例代码)
本文介绍了RabbitMQ的DirectExchange模式下的消息发布和消费的实现,详细说明了如何在DirectExchange模式中进行消息的发送和接收,以及消息处理的基本方法,感兴趣的朋友跟随小编一起看看吧2024-09-09Spring Boot使用Hibernate-Validator校验参数时的长度校验方法详解
这篇文章主要给大家介绍了关于Spring Boot使用Hibernate-Validator校验参数时的长度校验方法的相关资料,在Spring Boot中可以使用Spring Boot Validation来对参数名称进行校验,需要的朋友可以参考下2023-08-08springboot自带的缓存@EnableCaching用法
这篇文章主要介绍了springboot自带的缓存@EnableCaching用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-08-08
最新评论