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)文章
SpringBoot開啟server:compression:enabled(Illegal characte
本文主要介紹了SpringBoot開啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
SpringBoot實(shí)現(xiàn)登錄攔截的示例代碼
如果我們不進(jìn)行登錄攔截的話,即使我們跳過(guò)登錄頁(yè)面直接去訪問(wèn)任意一個(gè)頁(yè)面也能訪問(wèn)成功,那么登錄功能就沒(méi)有意義,同時(shí)也會(huì)存在安全問(wèn)題,本文就來(lái)介紹一下SpringBoot登錄攔截,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏
這篇文章主要介紹了Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
詳解Spring Boot 定時(shí)任務(wù)的實(shí)現(xiàn)方法
最近在用SpringBoot寫一個(gè)關(guān)于定時(shí)項(xiàng)目的時(shí)候遇到一個(gè)問(wèn)題,下面小編把如何處理定時(shí)任務(wù)的解決思路分享給大家 ,需要的朋友參考下2017-05-05

