java8 Stream list to Map key 重复 value合并到Collectio的操作
作者:不泪之城 发布时间:2022-02-01 23:53:58
标签:java8,key,重复,value,Collectio
java8 Stream list to Map key 重复 value合并到Collectio
关于把list转换成key value的map有很多博客上都有实现,这里是一个把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泛型可以是一个bean,取bean的属性当key或者value,转换成一个集合
结果:
{"1":["1","1"],"2":["2"],"3":["3"]}
list中Map合并重复数据(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相同数据)
System.out.println("原始数据:"+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("合并后的数据:"+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("合并后的数据2:"+result2);
}
来源:https://blog.csdn.net/abc123maxiaolong/article/details/84906381


猜你喜欢
- 前言之所以会有这篇文章,是因为公司的开发环境比较老,寻找一些jar包的时候总是会纠结对应的编译版本,感觉很麻烦,所以写了一个工具类用于读取c
- Android MotionEvent中getX()和getRawX()的区别实例详解实例代码:public class Res exten
- cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是
- 最大公约数:指两个或多个整数共有约束中最大的一个。最小公倍数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整
- 简单讲下用法://引依赖<dependency><groupId>tk.mybatis</groupId>
- 一、创建 Android Project在新建对话框中输入 App 属性,SDK版本全部选最新的,不作版本兼容。主题选择 Holo Dark
- 正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。接下来通过本
- Gradle修改默认的Build配置文件名Gradle默认使用build.gradle作为默认的配置文件文件名。如果我们在build.gra
- Android 调用百度地图API一、到 百度地图开发平台下载SDKhttp://lbsyun.baidu.com/index.php?ti
- 本文实例讲述了Java后台线程操作。分享给大家供大家参考,具体如下:一 点睛有一种线程,它是后面运行的,它的任务是为其他线程提供服务,这种线
- 本文实例为大家分享了ListView分页加载数据的具体代码,供大家参考,具体内容如下FenyeActivitypackage com.exa
- spring cloud常用依赖和配置整理常用依赖// pom.xml<?xml version="1.0" en
- 一.工程文件二.Main.java主函数,实现类package ui;//主函数实现public class Main { &
- Java游戏俄罗斯方块的实现实例 java小
- 使用Mybatis-Plus的SqlSessionFactory问题前些日子工作中出现一个问题,项目中使用了MybatisPlus,然后出现
- 获取Spring中的bean有很多种方式,再次总结一下:第一种:在初始化时保存ApplicationContext对象Application
- 本文实例为大家分享了flutter实现倒计时加载页面的具体代码,供大家参考,具体内容如下效果图实现步骤1、pubspec.yaml中添加依赖
- 前文传送门:NioEventLoop处理IO事件执行任务队列继续回到NioEventLoop的run()方法:protected void
- //C# 根据当前时间获取本周、下周、本月、下月、本季度等时间段DateTime dt = DateTime.Now; //当前
- java读取文件内容,解析Json格式数据一、读取txt文件内容(Json格式数据) public static