Java 将List中的实体类按照某个字段进行分组并存放至Map中操作

 更新时间:2020年10月10日 11:41:19   作者:hui008  
这篇文章主要介绍了Java 将List中的实体类按照某个字段进行分组并存放至Map中操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1、JDK1.8之前:

假设有实体类User,里面有字段id,我们将相同id的User进行分组,并存放在Map中。(例子不是很恰当,但很能说明问题)

public static void main(String[] args) {
 List<User> list = new ArrayList<>();
 list.add(new User(1, 1));
 list.add(new User(1, 2));
 list.add(new User(2, 1));
 list.add(new User(2, 3));
 list.add(new User(2, 2));
 list.add(new User(3, 1));
 Map<Integer, List<User>> map = new HashMap<>();
 for(User user : list){
 if(map.containsKey(user.getId())){//map中存在此id,将数据存放当前key的map中
 map.get(user.getId()).add(user);
 }else{//map中不存在,新建key,用来存放数据
 List<User> tmpList = new ArrayList<>();
 tmpList.add(user);
 map.put(user.getId(), tmpList);
 }
 }
 System.out.println(map.toString());
 }

执行结果:

可以看到达到了了我们的目的

2、JDK1.8 新特性实现

Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));

附上

List<Map<String, Object>>>分组
List<Map<String, Object>>> list = new ArrayList<>();
Map<Long, List<Map<String, Object>>> contractIdMap =
 list.stream().collect(Collectors.groupingBy(m -> (Long.parseLong(m.get("contractId").toString()))));
Map<Long, List<Map<String, Object>>> nameMap =
 list.stream().collect(Collectors.groupingBy(m -> (m.get("name").toString())));

补充知识:java中对list的数据按照某个属性进行分组,拆分成多个list

我就废话不多说了,大家还是直接看代码吧~

/**
* 按照List<Map<String,Object>>里面map的某个value重新封装成多个不同的list, 原始数据类型List<Map
* <String,Object>>, 转换后数据类型Map<String,List<Map<String,Object>>>
*
* @param list
* @param oneMapKey
* @return
*/
private static Map<String, Object> change(List<Map<String, Object>> list, String oneMapKey) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Set setTmp = new HashSet();
for (Map<String, Object> tmp : list) {
setTmp.add(tmp.get(oneMapKey));
}
Iterator it = setTmp.iterator();
while (it.hasNext()) {
String oneSetTmpStr = (String) it.next();
List<Map<String, Object>> oneSetTmpList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> tmp : list) {
String oneMapValueStr = (String) tmp.get(oneMapKey);
if (oneMapValueStr.equals(oneSetTmpStr)) {
oneSetTmpList.add(tmp);
}
}
resultMap.put(oneSetTmpStr, oneSetTmpList);
}
return resultMap;
}

以上这篇Java 将List中的实体类按照某个字段进行分组并存放至Map中操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring观察者模式之事件发布订阅实现和源码详解

    Spring观察者模式之事件发布订阅实现和源码详解

    这篇文章主要介绍了Spring观察者模式之事件发布订阅实现和源码详解,Spring认为发布订阅主题,其实可以理解为事件驱动的编码,先来实现以下Spring容器中的事件发布订阅,需要的朋友可以参考下
    2024-01-01
  • 用拦截器修改返回response,对特定的返回进行修改操作

    用拦截器修改返回response,对特定的返回进行修改操作

    这篇文章主要介绍了用拦截器修改返回response,对特定的返回进行修改操作。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot整合EasyExcel实现复杂Excel表格的导入导出

    SpringBoot整合EasyExcel实现复杂Excel表格的导入导出

    这篇文章主要为大家详细介绍了SpringBoot如何整合EasyExcel实现复杂Excel表格的导入导出功能,文中的示例代码讲解详细,感兴趣的小伙伴可以参考下
    2023-11-11
  • Spring Boot整合Spring Security简单实现登入登出从零搭建教程

    Spring Boot整合Spring Security简单实现登入登出从零搭建教程

    这篇文章主要给大家介绍了关于Spring Boot整合Spring Security简单实现登入登出从零搭建的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-09-09
  • 使用spring mail发送html邮件的示例代码

    使用spring mail发送html邮件的示例代码

    本篇文章主要介绍了使用spring mail发送html邮件的示例代码,这里整理了详细的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • SpringBoot优化启动速度的方法实现

    SpringBoot优化启动速度的方法实现

    本篇文章主要介绍了SpringBoot优化启动速度的方法实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 关于SpringBoot Actuator漏洞补救方案

    关于SpringBoot Actuator漏洞补救方案

    SpringBoot Actuator模块提供了健康检查,审计,指标收集,HTTP 跟踪等,是帮助我们监控和管理SpringBoot应用的模块,本文将主要介绍SpringBoot Actuator漏洞的补救方案,需要的朋友可以参考下
    2023-06-06
  • Java设计模式之备忘录模式

    Java设计模式之备忘录模式

    这篇文章主要介绍了Java设计模式之备忘录模式,备忘录模式(Memento Pattern),属于行为型设计模式,目的是用于保存一个对象在某一时刻的状态,以便于在将来某个时刻根据此状态恢复该对象,需要的朋友可以参考下
    2023-12-12
  • 详解Spring MVC拦截器实现session控制

    详解Spring MVC拦截器实现session控制

    这篇文章主要介绍了详解Spring MVC拦截器实现session控制,使用session监听,重复登录后,强制之前登录的session过期。有兴趣的可以了解一下。
    2017-01-01
  • Maven基础知识大梳理

    Maven基础知识大梳理

    这篇文章主要是Maven基础知识大梳理,Maven主要是用来解决导入java类依赖的jar,编译java项目主要问题,大家可以读一读这篇文章,更深一步的了解Maven
    2021-08-08

最新评论