Java中Map.merge()方法使用示例詳解
1 簡(jiǎn)介
JDK8中新增了Map.merge()方法,但是之前沒(méi)有用過(guò)。merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)。
- key:map的key
- value:使用者傳入的值
- remappingFunction:BiFunction函數(shù)式接口
當(dāng)map中不存在指定的key時(shí),便將傳入的value設(shè)置為key的值,相當(dāng)于map.put(key, value);當(dāng)key存在值時(shí),執(zhí)行一個(gè)方法該方法接收key的舊值和傳入的value,執(zhí)行自定義的方法返回最終結(jié)果設(shè)置為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 實(shí)例
3.1 簡(jiǎn)單實(shí)例
/**
* 簡(jiǎn)單實(shí)例
*/
@Test
public void someTest01() {
Map<String, Integer> map = new HashMap<>();
map.put("key1", 10);
map.put("key2", 20);
// 當(dāng)key存在時(shí),進(jìn)行old+value;當(dāng)key不存在時(shí),將key的值設(shè)置為1
map.merge("key", 1, Integer::sum);
// 當(dāng)key1存在時(shí),進(jìn)行old+value;當(dāng)key1不存在時(shí),將key1的值設(shè)置為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 開(kāi)發(fā)實(shí)例
@Data
public class Student {
/**
* 學(xué)生姓名
*/
private String studentName;
/**
* 學(xué)科
*/
private String subject;
/**
* 分?jǐn)?shù)
*/
private Integer score;
public Student(String studentName, String subject, Integer score) {
this.studentName = studentName;
this.subject = subject;
this.score = score;
}
}
// ------------------------------------------------------------------
/**
* 統(tǒng)計(jì)學(xué)生成績(jī)
*/
@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));
}
// ------------------------------------------------------------------
// 運(yùn)行結(jié)果
姓名:Seely---成績(jī):269
姓名:taohai.wang---成績(jī):163
姓名:yoni---成績(jī):273到此這篇關(guān)于Map.merge()方法使用和介紹的文章就介紹到這了,更多相關(guān)Map.merge()方法使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java程序單實(shí)例運(yùn)行的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了Java程序單實(shí)例運(yùn)行的簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題
這篇文章主要介紹了聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Springboot使用RabbitMQ實(shí)現(xiàn)關(guān)閉超時(shí)訂單(示例詳解)
介紹了如何在Spring Boot項(xiàng)目中使用RabbitMQ實(shí)現(xiàn)訂單的延時(shí)處理和超時(shí)關(guān)閉,通過(guò)配置RabbitMQ的交換機(jī)、隊(duì)列和綁定關(guān)系,以及編寫監(jiān)聽(tīng)方法,實(shí)現(xiàn)了訂單數(shù)據(jù)的發(fā)送和延時(shí)消費(fèi),感興趣的朋友一起看看吧2025-01-01
SpringCloud?微服務(wù)數(shù)據(jù)權(quán)限控制的實(shí)現(xiàn)
這篇文章主要介紹的是權(quán)限控制的數(shù)據(jù)權(quán)限層面,意思是控制可訪問(wèn)數(shù)據(jù)資源的數(shù)量,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-11-11
mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解
XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動(dòng)態(tài)sql的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2024-12-12
SpringBoot大事務(wù)問(wèn)題的常用優(yōu)化方案
大事務(wù)是指運(yùn)行時(shí)間比較長(zhǎng),操作的數(shù)據(jù)比較多的事務(wù)123,大事務(wù)的產(chǎn)生原因包括操作的數(shù)據(jù)比較多、大量的鎖競(jìng)爭(zhēng)、事務(wù)中有其他非數(shù)據(jù)庫(kù)的耗時(shí)操作等,本文給大家總結(jié)了SpringBoot大事務(wù)問(wèn)題的常用優(yōu)化方案,需要的朋友可以參考下2024-04-04
springboot普通類中如何獲取session問(wèn)題
這篇文章主要介紹了springboot普通類中如何獲取session問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Token過(guò)期實(shí)現(xiàn)自動(dòng)續(xù)期的方法步驟
本文詳細(xì)解析了Token在防止表單重復(fù)提交、身份驗(yàn)證及過(guò)期處理中的應(yīng)用,涵蓋Token的生成流程、過(guò)期機(jī)制及續(xù)期方案,特別介紹了單token與雙token兩種策略,需要的朋友可以參考下2026-05-05
SpringBoot自定義Starter與自動(dòng)配置實(shí)現(xiàn)方法詳解
在Spring Boot官網(wǎng)為了簡(jiǎn)化我們的開(kāi)發(fā),已經(jīng)提供了非常多場(chǎng)景的Starter來(lái)為我們使用,即便如此,也無(wú)法全面的滿足我們實(shí)際工作中的開(kāi)發(fā)場(chǎng)景,這時(shí)我們就需要自定義實(shí)現(xiàn)定制化的Starter2023-02-02

