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":"男"
                }
            ]
        }
    }
}
复制代码

 

posted @   静默之尘  阅读(173)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2021-04-25 centos下压缩文件夹
点击右上角即可分享
微信分享提示