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:13.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()方法使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
通过prometheus监控springboot程序运行状态的操作流程
jmx_exporter用于从Java应用程序中提取JMX指标,适用于SpringBoot应用,通过下载jar包和配置文件,可以抓取JVM基础指标,要获取应用级别指标,需要集成Prometheus客户端库并自定义指标,本文给大家介绍了如何通过prometheus监控springboot程序运行状态2025-02-02
Spring Boot中集成各种日志框架Logback、Log4j2和Java Util
这篇文章主要介绍了Spring Boot中集成各种日志框架Logback、Log4j2和Java Util Logging,通过实例代码介绍了集成Logback、Log4j2和Java Util Logging的基本步骤,你可以根据自己的需求进行配置和扩展,以满足更复杂的日志需求,需要的朋友可以参考下2023-11-11


最新评论