java8 Stream list to Map key Repeat the merging of value into Collectio
- 2021-09-12 01:16:31
- OfStack
java8 Stream list to Map key Repeat value Merge into Collectio
map, which converts list into key and value, has been implemented on many blogs, and here is one that puts value into the collection
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));
Similarly, your list generic type can be 1 bean, take the attribute of bean and convert it to 1 set when key or value
Results:
{"1":["1","1"],"2":["2"],"3":["3"]}
Map in list merges duplicate data (value values equal to key in map add)
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 Equality value Add (merge) id Same data)
System.out.println(" Original data: "+list);
// Method 1
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(" Consolidated data: "+result1);
// Method 2
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(" Consolidated data 2 : "+result2);
}