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:1
3.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)文章
通過prometheus監(jiān)控springboot程序運行狀態(tài)的操作流程
jmx_exporter用于從Java應用程序中提取JMX指標,適用于SpringBoot應用,通過下載jar包和配置文件,可以抓取JVM基礎(chǔ)指標,要獲取應用級別指標,需要集成Prometheus客戶端庫并自定義指標,本文給大家介紹了如何通過prometheus監(jiān)控springboot程序運行狀態(tài)2025-02-02Spring Boot中集成各種日志框架Logback、Log4j2和Java Util
這篇文章主要介紹了Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging,通過實例代碼介紹了集成Logback、Log4j2和Java Util Logging的基本步驟,你可以根據(jù)自己的需求進行配置和擴展,以滿足更復雜的日志需求,需要的朋友可以參考下2023-11-11Spring整合Quartz實現(xiàn)動態(tài)定時器的示例代碼
本篇文章主要介紹了Spring整合Quartz實現(xiàn)動態(tài)定時器的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-01-01