JAVA集合06_流式编程GroupBy和求最值示例

该博客展示了如何使用Java Stream API对复杂对象进行分组统计,包括按学校分组计数、按学校和姓名收集到Set,以及按学校收集完整的学生信息。示例中涉及了数据聚合、Map与TreeMap的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class groupByDemo {
    public static void main(String[] args) {
        /*------------------复杂对象演示------------------------*/
        List<Student> students = new ArrayList<Student>() {
            {
                add(new Student("20160001", "孔明", 20, 1, "土木工程", "武汉大学"));
                add(new Student("20160003", "玄德", 22, 3, "经济管理", "武汉大学"));
                add(new Student("20161001", "翼德", 21, 2, "机械与自动化", "华中科技大学"));
                add(new Student("20161003", "奉孝", 23, 4, "计算机科学", "华中科技大学"));
                add(new Student("20163001", "丁奉", 24, 5, "土木工程", "南京大学"));
            }
        };
        // group by统计用法示例
        Map<String, Long> groupCount =
                students.stream().collect(Collectors.groupingBy(Student::getSchool, Collectors.counting()));
        //输出:{南京大学=1, 武汉大学=2, 华中科技大学=2}
        System.out.println(groupCount);

        TreeMap<String, Set<String>> collectToSet =
                students.stream().collect(Collectors.groupingBy(Student::getSchool, TreeMap::new, Collectors.mapping(Student::getName, Collectors.toSet())));
        //输出:{华中科技大学=[翼德, 奉孝], 南京大学=[丁奉], 武汉大学=[孔明, 玄德]}
        System.out.println(collectToSet);
        Map<String, List<Student>> collect3 = students.stream().collect(Collectors.groupingBy(Student::getSchool));
        /* 输出:{
                南京大学=[Student(id=20163001, name=丁奉, age=24, grade=5, major=土木工程, school=南京大学)],
                武汉大学=[
                    Student(id=20160001, name=孔明, age=20, grade=1, major=土木工程, school=武汉大学),
                    Student(id=20160003, name=玄德, age=22, grade=3, major=经济管理, school=武汉大学)
                 ],
                 华中科技大学=[
                    Student(id=20161001, name=翼德, age=21, grade=2, major=机械与自动化, school=华中科技大学),
                    Student(id=20161003, name=奉孝, age=23, grade=4, major=计算机科学, school=华中科技大学)
                  ]
              }
        */
        System.out.println(collect3);
    }
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
class Student {
    private String id;
    private String name;
    private int age;
    private int grade;
    private String major;
    private String school;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所得皆惊喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值