java8 Stream list to Map key 重復(fù) value合并到Collectio的操作
java8 Stream list to Map key 重復(fù) value合并到Collectio
關(guān)于把list轉(zhuǎn)換成key value的map有很多博客上都有實(shí)現(xiàn),這里是一個(gè)把value放入到集合中去
List<String> list = Lists.newArrayList("1", "2", "3", "1"); Map<String, List<String>> map = list.stream().collect(Collectors.toMap(key -> key, value -> Lists.newArrayList(value), (List<String> newValueList, List<String> oldValueList) -> { oldValueList.addAll(newValueList); return oldValueList; })); System.out.println(JSON.toJSONString(map));
類似的,你的list泛型可以是一個(gè)bean,取bean的屬性當(dāng)key或者value,轉(zhuǎn)換成一個(gè)集合
結(jié)果:
{"1":["1","1"],"2":["2"],"3":["3"]}
list中Map合并重復(fù)數(shù)據(jù)(map中key相等的value值相加)
public static void main(String[] args) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("id", 1); map1.put("value", 2); list.add(map1); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("id", 1); map2.put("value", 5); list.add(map2); Map<String, Object> map3 = new HashMap<String, Object>(); map3.put("id", 2); map3.put("value", 5); list.add(map3); Map<String, Object> map4 = new HashMap<String, Object>(); map4.put("id", 2); map4.put("value", 4); list.add(map4); Map<String, Object> map5 = new HashMap<String, Object>(); map5.put("id", 1); map5.put("value", 4); list.add(map5); //id相等value相加(合并id相同數(shù)據(jù)) System.out.println("原始數(shù)據(jù):"+list); //方法一 Map<String, Object> result1 = new HashMap<String, Object>(); for(Map<String, Object> map : list){ String id = map.get("id").toString(); Long value = Long.parseLong(map.get("value").toString()); if(result1.containsKey(id)){ Long temp = Long.parseLong(result1.get(id).toString()); value += temp; } result1.put(id, value); } System.out.println("合并后的數(shù)據(jù):"+result1); //方法二 Map<String, Map<String, Object>> result2 = new HashMap<String, Map<String,Object>>(); for(Map<String, Object> map : list){ String id = map.get("id").toString(); Long value = Long.parseLong(map.get("value").toString()); if(result2.containsKey(id)){ Long temp = Long.parseLong(result2.get(id).get("value").toString()); value += temp; result2.get(id).put("value", value); continue; } result2.put(id, map); } System.out.println("合并后的數(shù)據(jù)2:"+result2); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解Java8新特性Stream之list轉(zhuǎn)map及問(wèn)題解決
- Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list
- java8快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作
- Java8 將一個(gè)List<T>轉(zhuǎn)為Map<String,T>的操作
- Java8中List轉(zhuǎn)Map(Collectors.toMap) 的技巧分享
- Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問(wèn)題小結(jié)
- Java8中forEach語(yǔ)句循環(huán)一個(gè)List和Map
- Java8中List轉(zhuǎn)Map的多種方式代碼
相關(guān)文章
Java數(shù)組,去掉重復(fù)值、增加、刪除數(shù)組元素的方法
下面小編就為大家?guī)?lái)一篇Java數(shù)組,去掉重復(fù)值、增加、刪除數(shù)組元素的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10springboot多數(shù)據(jù)源使用@Qualifier自動(dòng)注入無(wú)效的解決
這篇文章主要介紹了springboot多數(shù)據(jù)源使用@Qualifier自動(dòng)注入無(wú)效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。也希望大家多多支持腳本之家2021-11-11Java實(shí)現(xiàn)圖章或簽名插在pdf的固定位置
使用Java技術(shù)在word轉(zhuǎn)換成pdf過(guò)程中實(shí)現(xiàn)將圖章或者簽名插入在pdf中,并生成帶圖章或者簽名的pdf,來(lái)完成某些特定場(chǎng)景的需求,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10解決mybatis無(wú)法給帶有下劃線屬性賦值問(wèn)題
這篇文章主要介紹了解決mybatis無(wú)法給帶有下劃線屬性賦值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01詳解利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題
本篇文章主要介紹了詳解利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題。具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03在IDEA中創(chuàng)建Web項(xiàng)目的詳細(xì)過(guò)程
這篇文章主要給大家介紹了關(guān)于在IDEA中創(chuàng)建Web項(xiàng)目的詳細(xì)過(guò)程,很多朋友可能在學(xué)習(xí)java基礎(chǔ)的時(shí)候已經(jīng)熟練掌握了IDEA創(chuàng)建java項(xiàng)目的基本步驟,但隨著學(xué)習(xí)技術(shù)的不斷深入,不同的IDEA版本可能在項(xiàng)目的創(chuàng)建頁(yè)面上出現(xiàn)些許的出入,需要的朋友可以參考下2023-10-10SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器詳解
這篇文章主要為大家介紹了SpringMVC視圖轉(zhuǎn)發(fā)重定向區(qū)別及控制器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05