java stream 多重groupingBy
import com.alibaba.fastjson.JSON; import lombok.Data; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @ClassName Test * @Description * @Author csg * @Data 2023/4/25 21:31 * @Version 1.0 */ public class Test { public static void main(String[] args) { User user1 = new User("zhangsan", "beijing", "男", 10); User user2 = new User("zhangsan", "beijing", "女", 20); User user3 = new User("lisi", "shanghai", "男", 30); List<User> list = new ArrayList<>(); list.add(user1); list.add(user2); list.add(user3); //先按照性别分组,再按照地址分组,最后按照名称分组 从外到内依次进行分组,已分组数据不会再次被内层分组查找出来 Map<String, Map<String, Map<String, List<User>>>> collect = list.stream().collect( Collectors.groupingBy(User::getSex, Collectors.groupingBy( User::getAddress, Collectors.groupingBy(User::getName) ) ) ); System.out.println(JSON.toJSONString(collect)); } } @Data class User { private String name; private String address; private String sex; private int age; public User(String name, String address, String sex, int age) { this.name = name; this.address = address; this.sex = sex; this.age = age; } }
排序后数据
{
"女":{
"beijing":{
"zhangsan":[
{
"address":"beijing",
"age":20,
"name":"zhangsan",
"sex":"女"
}
]
}
},
"男":{
"shanghai":{
"lisi":[
{
"address":"shanghai",
"age":30,
"name":"lisi",
"sex":"男"
}
]
},
"beijing":{
"zhangsan":[
{
"address":"beijing",
"age":10,
"name":"zhangsan",
"sex":"男"
}
]
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2021-04-25 centos下压缩文件夹