Java8 新特性 list集合利用stream根据对象得某一属性对集合进行分组,附加8之前分组

本文介绍了Java8中利用Stream API对List集合中的对象按某个属性进行分组的方法,通过一个Student实体类实例展示了如何根据姓名对学生进行分组,并与传统方式进行了对比。示例代码清晰地演示了Java8的新特性,便于理解和应用。
摘要由CSDN通过智能技术生成

Java8之后很多新特性,接下来主要讲一下, list集合利用stream根据对象得某一属性对集合进行分组!
话不多说,上代码:
首先准备实体类:


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    private Integer id;

    private String name;
	//成绩
    private Double score;
    
}

然后开始写测试类:

import java.util.*;
import java.util.stream.Collectors;

public class GroupByName {

    public static void main(String[] args) {
        //准备要分组得集合
        List<Student> students = Arrays.asList(
            new Student(1,"伽罗",99d),
            new Student(2,"后羿",97d),
            new Student(3,"鲁班",98d),
            new Student(4,"后羿",90d),
            new Student(5,"百里",88d),
            new Student(6,"狼狗",59d),
            new Student(7,"艾琳",78d),
            new Student(8,"伽罗",94d)
        );

        //jdk8.0新特性来分组,根据学生姓名来进行分组
        Map<String,List<Student>> result = new HashMap<>();
        result = students.stream().collect(Collectors.groupingBy(Student::getName));
        result.forEach((x,y) -> System.out.println(x+"--"+y));

        System.out.println("华丽分割线"+"------------------------");
        //jdk1.8之前手写分组
        Map<String,List<Student>> map = new HashMap<>();
        for (Student student : students) {
            List<Student> list = map.get(student.getName());
            if (list == null) {
                list = new ArrayList<>();
                list.add(student);
                map.put(student.getName(), list);
            } else {
                list.add(student);
            }
        }
        map.forEach((x,y) -> System.out.println(x+"--"+y));

        /**
         * 结果:
         * 伽罗--[Student(id=1, name=伽罗, score=99.0), Student(id=8, name=伽罗, score=94.0)]
         * 百里--[Student(id=5, name=百里, score=88.0)]
         * 狼狗--[Student(id=6, name=狼狗, score=59.0)]
         * 艾琳--[Student(id=7, name=艾琳, score=78.0)]
         * 后羿--[Student(id=2, name=后羿, score=97.0), Student(id=4, name=后羿, score=90.0)]
         * 鲁班--[Student(id=3, name=鲁班, score=98.0)]
         */

    }
}

到这里新特性分组就介绍完了,列子简单,直接上手简单,谢谢大家支持!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

掉发的小王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值