日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java 8 中 Map 騷操作之 merge() 的使用方法

瀏覽:111日期:2022-08-09 08:02:26

Java 8 最大的特性無異于更多地面向函數(shù),比如引入了lambda等,可以更好地進(jìn)行函數(shù)式編程。前段時間無意間發(fā)現(xiàn)了map.merge()方法,感覺還是很好用的,此文簡單做一些相關(guān)介紹。首先我們先看一個例子。

merge()怎么用?

假設(shè)我們有這么一段業(yè)務(wù)邏輯,我有一個學(xué)生成績對象的列表,對象包含學(xué)生姓名、科目、科目分?jǐn)?shù)三個屬性,要求求得每個學(xué)生的總成績。加入列表如下:

private List<StudentScore> buildATestList() {List<StudentScore> studentScoreList = new ArrayList<>();StudentScore studentScore1 = new StudentScore() {{ setStuName('張三'); setSubject('語文'); setScore(70);}};StudentScore studentScore2 = new StudentScore() {{ setStuName('張三'); setSubject('數(shù)學(xué)'); setScore(80);}};StudentScore studentScore3 = new StudentScore() {{ setStuName('張三'); setSubject('英語'); setScore(65);}};StudentScore studentScore4 = new StudentScore() {{ setStuName('李四'); setSubject('語文'); setScore(68);}};StudentScore studentScore5 = new StudentScore() {{ setStuName('李四'); setSubject('數(shù)學(xué)'); setScore(70);}};StudentScore studentScore6 = new StudentScore() {{ setStuName('李四'); setSubject('英語'); setScore(90);}};StudentScore studentScore7 = new StudentScore() {{ setStuName('王五'); setSubject('語文'); setScore(80);}};StudentScore studentScore8 = new StudentScore() {{ setStuName('王五'); setSubject('數(shù)學(xué)'); setScore(85);}};StudentScore studentScore9 = new StudentScore() {{ setStuName('王五'); setSubject('英語'); setScore(70);}};studentScoreList.add(studentScore1);studentScoreList.add(studentScore2);studentScoreList.add(studentScore3);studentScoreList.add(studentScore4);studentScoreList.add(studentScore5);studentScoreList.add(studentScore6);studentScoreList.add(studentScore7);studentScoreList.add(studentScore8);studentScoreList.add(studentScore9);return studentScoreList; }

我們先看一下常規(guī)做法:

ObjectMapper objectMapper = new ObjectMapper();List<StudentScore> studentScoreList = buildATestList();Map<String, Integer> studentScoreMap = new HashMap<>();studentScoreList.forEach(studentScore -> { if (studentScoreMap.containsKey(studentScore.getStuName())) {studentScoreMap.put(studentScore.getStuName(), studentScoreMap.get(studentScore.getStuName()) + studentScore.getScore()); } else {studentScoreMap.put(studentScore.getStuName(), studentScore.getScore()); }});System.out.println(objectMapper.writeValueAsString(studentScoreMap));

// 結(jié)果如下:// {'李四':228,'張三':215,'王五':235}

然后再看一下merge()是怎么做的:

Map<String, Integer> studentScoreMap2 = new HashMap<>();studentScoreList.forEach(studentScore -> studentScoreMap2.merge( studentScore.getStuName(), studentScore.getScore(), Integer::sum));System.out.println(objectMapper.writeValueAsString(studentScoreMap2));

// 結(jié)果如下:// {'李四':228,'張三':215,'王五':235}

merge()簡介

merge()可以這么理解:它將新的值賦值到 key (如果不存在)或更新給定的key 值對應(yīng)的 value,其源碼如下:

default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) {Objects.requireNonNull(remappingFunction);Objects.requireNonNull(value);V oldValue = this.get(key);V newValue = oldValue == null ? value : remappingFunction.apply(oldValue, value);if (newValue == null) { this.remove(key);} else { this.put(key, newValue);}return newValue; }

我們可以看到原理也是很簡單的,該方法接收三個參數(shù),一個 key 值,一個 value,一個remappingFunction,如果給定的key不存在,它就變成了put(key, value)。但是,如果 key 已經(jīng)存在一些值,我們remappingFunction可以選擇合并的方式,然后將合并得到的newValue賦值給原先的 key。

使用場景

這個使用場景相對來說還是比較多的,比如分組求和這類的操作,雖然 stream 中有相關(guān)groupingBy()方法,但如果你想在循環(huán)中做一些其他操作的時候,merge()還是一個挺不錯的選擇的。

其他

除了merge()方法之外,我還看到了一些Java 8 中map相關(guān)的其他方法,比如putIfAbsent、compute()、computeIfAbsent()、computeIfPresent,這些方法我們看名字應(yīng)該就知道是什么意思了,故此處就不做過多介紹了,感興趣的可以簡單閱讀一下源碼(都還是挺易懂的),這里我們貼一下compute()(Map.class)的源碼,其返回值是計算后得到的新值:

default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) {Objects.requireNonNull(remappingFunction);V oldValue = this.get(key);V newValue = remappingFunction.apply(key, oldValue);if (newValue == null) { if (oldValue == null && !this.containsKey(key)) {return null; } else {this.remove(key);return null; }} else { this.put(key, newValue); return newValue;} }總結(jié)

本文簡單介紹了一下Map.merge()的方法,除此之外,Java 8 中的HashMap實(shí)現(xiàn)方法使用了TreeNode和 紅黑樹,在源碼閱讀上可能有一點(diǎn)難度,不過原理上還是相似的,compute()同理。所以,源碼肯定是要看的,不懂的地方多讀多練自然就理解了。

鏈接

參考:

www.jianshu.com/p/68e6b3041…

測試代碼地址:

github.com/lq920320/al…

到此這篇關(guān)于Java 8 中 Map 騷操作之 merge() 的用法 的文章就介紹到這了,更多相關(guān)Java 8 merge()用法內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲少妇自拍| 国产aⅴ精品一区二区四区| av资源亚洲| 精品久久久久中文字幕小说| 精品高清久久| 欧美色图一区| 日韩精品久久理论片| 国产精品任我爽爆在线播放 | 日韩精品专区| 亚洲一区观看| 国产精品蜜月aⅴ在线| 国产成人精品一区二区三区免费| 日韩中文首页| 国产探花一区二区| 成人国产综合| 亚洲日本三级| 精品国产欧美日韩一区二区三区| 另类中文字幕国产精品| 免费观看不卡av| 日韩免费精品| 亚洲二区在线| 欧美激情视频一区二区三区免费| 99久久婷婷| 国产欧美88| 亚洲人成毛片在线播放女女| 日韩视频网站在线观看| 久久精品 人人爱| 精品在线91| 久久99精品久久久野外观看| 好看的av在线不卡观看| 精品一区视频| 在线看片一区| 日韩免费久久| 久久久亚洲欧洲日产| 在线看片日韩| 视频福利一区| 国产欧美一区二区三区精品酒店 | 国产尤物精品| 国产欧洲在线| 精品国产91| 美女尤物国产一区| 三级久久三级久久久| 日韩精品一级二级| 好吊日精品视频| 久久久久中文| 久久国产毛片| 成人国产精品| 四虎国产精品免费观看| 国产a亚洲精品| 色乱码一区二区三区网站| 精品久久电影| 国产aa精品| 午夜av成人| 亚洲激情偷拍| 五月亚洲婷婷 | 香蕉久久99| 久久福利影视| 国产日韩欧美一区二区三区在线观看| 日本va欧美va精品| 麻豆成人在线观看| 在线天堂中文资源最新版| 色88888久久久久久影院| 国产99久久| 亚洲在线一区| 国产精品一区二区免费福利视频| 免费欧美在线视频| 亚洲色图网站| 久久狠狠亚洲综合| 亚洲免费毛片| 中文字幕日韩高清在线 | japanese国产精品| 蜜桃精品在线| 麻豆精品蜜桃| 亚洲成人精选| 免费日本视频一区| 日本va欧美va精品发布| 成人精品国产亚洲| 色综合www| 国产精品试看| 国产剧情在线观看一区| 欧美一区久久| 激情国产在线| 亚洲一区日韩在线| 国产精品激情电影| 91精品久久久久久久久久不卡| 免费av一区二区三区四区| 久久亚洲专区| 亚洲人成亚洲精品| 国产日韩亚洲| 另类中文字幕国产精品| 日韩欧美四区| 久久婷婷一区| 久久精品72免费观看| 国产白浆在线免费观看| 91精品国产成人观看| 国产精品日韩| 国产精品久久乐| 日韩天堂av| 日本va欧美va欧美va精品| 亚洲少妇一区| 成人三级高清视频在线看| 在线精品福利| 久久xxxx精品视频| 亚洲国产成人二区| 国产精品美女久久久| 麻豆高清免费国产一区| 国产亚洲精品v| 日韩一区二区在线免费| 久久久精品区| 久久麻豆视频| 欧美日韩 国产精品| 丝袜脚交一区二区| 中文字幕系列一区| 日韩av资源网| 国产精品7m凸凹视频分类| 国产精品亚洲人成在99www | 久久青青视频| 激情欧美一区二区三区| 久久久久久免费视频| 久久国产精品成人免费观看的软件| 国产日韩欧美高清免费| 亚洲精品影视| 日本国产欧美| 日本一区二区三区中文字幕| 五月天久久777| 欧美不卡高清| 高清一区二区| 国产精品久久久一区二区| 日本欧美韩国一区三区| 日本久久一区| 国产精品观看| 高清日韩欧美| 久久青草久久| 丝袜美腿一区二区三区| 无码日韩精品一区二区免费| 久久av影院| 一区二区三区四区在线看| 亚洲欧美高清| 四虎国产精品免费久久| 国产精品一国产精品| 在线人成日本视频| 精品视频97| 美女av一区| 激情黄产视频在线免费观看| 激情久久久久久久| 久久国产高清| 欧美一区=区三区| 精品一区二区三区免费看| 亚洲一区资源| 悠悠资源网久久精品| 午夜久久tv| 国产精品va视频| 亚洲播播91| 国产欧美一区二区精品久久久| 国内不卡的一区二区三区中文字幕| 日韩精品久久久久久久电影99爱| 99pao成人国产永久免费视频 | 日韩欧美高清一区二区三区| 国产精品一区二区av交换| 国产精品久久久久久久免费观看| 午夜欧美精品久久久久久久| 视频一区视频二区中文| 国产欧美另类| 国产精品美女久久久| 国产伦久视频在线观看| 在线综合欧美| 久久精品99国产精品日本| 精品网站999| 日韩不卡一二三区| 香蕉精品视频在线观看| 国产精品99在线观看| 99成人在线| 精品视频网站| 亚洲我射av| 日韩视频中文| 欧美特黄一区| 欧美日韩一二| 日本在线高清| 中文字幕系列一区| 欧美日韩99| 亚洲一区二区av| 欧美一级精品| 日本精品在线中文字幕| 日本不卡免费高清视频在线| 人人精品亚洲| 欧美精品日日操| 国产精品精品国产一区二区| 久久精品一区二区国产| 日韩av网站在线观看| 一区二区三区国产在线| 蜜臀av免费一区二区三区| 男女精品网站| 亚洲免费成人av在线| 亚洲精品福利| 久久99蜜桃| 91亚洲国产| 亚洲午夜电影| 亚洲h色精品| 中文另类视频| 久久亚洲在线|