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函數(shù)式接口
當map中不存在指定的key時,便將傳入的value設置為key的值,相當于map.put(key, value);當key存在值時,執(zhí)行一個方法該方法接收key的舊值和傳入的value,執(zhí)行自定義的方法返回最終結(jié)果設置為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));
}
// ------------------------------------------------------------------
// 打印結(jié)果
k:key1---v:30
k:key2---v:20
k:key---v:13.2 開發(fā)實例
@Data
public class Student {
/**
* 學生姓名
*/
private String studentName;
/**
* 學科
*/
private String subject;
/**
* 分數(shù)
*/
private Integer score;
public Student(String studentName, String subject, Integer score) {
this.studentName = studentName;
this.subject = subject;
this.score = score;
}
}
// ------------------------------------------------------------------
/**
* 統(tǒng)計學生成績
*/
@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));
}
// ------------------------------------------------------------------
// 運行結(jié)果
姓名:Seely---成績:269
姓名:taohai.wang---成績:163
姓名:yoni---成績:273到此這篇關(guān)于Map.merge()方法使用和介紹的文章就介紹到這了,更多相關(guān)Map.merge()方法使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
聊聊SpringBoot的@Scheduled的并發(fā)問題
這篇文章主要介紹了聊聊SpringBoot的@Scheduled的并發(fā)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Springboot使用RabbitMQ實現(xiàn)關(guān)閉超時訂單(示例詳解)
介紹了如何在Spring Boot項目中使用RabbitMQ實現(xiàn)訂單的延時處理和超時關(guān)閉,通過配置RabbitMQ的交換機、隊列和綁定關(guān)系,以及編寫監(jiān)聽方法,實現(xiàn)了訂單數(shù)據(jù)的發(fā)送和延時消費,感興趣的朋友一起看看吧2025-01-01
SpringCloud?微服務數(shù)據(jù)權(quán)限控制的實現(xiàn)
這篇文章主要介紹的是權(quán)限控制的數(shù)據(jù)權(quán)限層面,意思是控制可訪問數(shù)據(jù)資源的數(shù)量,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-11-11
mybatis-xml映射文件及mybatis動態(tài)sql詳解
XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動態(tài)sql的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2024-12-12
SpringBoot自定義Starter與自動配置實現(xiàn)方法詳解
在Spring Boot官網(wǎng)為了簡化我們的開發(fā),已經(jīng)提供了非常多場景的Starter來為我們使用,即便如此,也無法全面的滿足我們實際工作中的開發(fā)場景,這時我們就需要自定義實現(xiàn)定制化的Starter2023-02-02

