Java 8 stream()分组,过滤筛选 List 根据Object 中的某几个属性作为条件进行分组 去重过滤

List对象 筛选学生年龄 和性别一样的 进行分组,并且挑选出身高最高的 学生

Object类:Student

public class Student {

    private String name;
    private int age;
    private Long hight;
    private int sex;
    省去相应 get/set方法
    // 设置 年龄和性别的拼接,得出相应分组

    public Long getIwantStudent(){
        return  Long.valueOf(this.sex + this.age);
    }
public class GetTrueStudent {

    public static void main(String[] args) {
        List<Student> allList = new ArrayList<>();
        //添加集合信息 省去。。。
        Student st1 = new Student();
        st1.setAge(20);
        st1.setHight(178L);
        st1.setSex(1);
        st1.setName("韩梅梅");
        allList.add(st1);
        Student st11 = new Student();
        st11.setAge(20);
        st11.setHight(168L);
        st11.setSex(1);
        st11.setName("马冬梅");
        allList.add(st11);

        Student st2 = new Student();
        st2.setAge(21);
        st2.setHight(179L);
        st2.setSex(2);
        st2.setName("李磊");
        allList.add(st2);
        Student st22 = new Student();
        st22.setAge(21);
        st22.setHight(189L);
        st22.setSex(2);
        st22.setName("小李");
        allList.add(st22);

        // 以年龄 和 性别 分组,并选取最高身高的 学生
        Map<Long, Optional<Student>> allMapTask = allList.stream().collect(
                Collectors.groupingBy(Student::getIwantStudent, Collectors.maxBy((o1, o2) -> o1.getHight().compareTo(o2.getHight()))));

        // 遍历获取对象信息
        for (Map.Entry<Long,Optional<Student>> entry: allMapTask.entrySet()) {
            Student student = entry.getValue().get();
            System.out.println(student.toString());
        }
    }

}

重点知识点

Collectors.groupingBy 方法 根据Student对象中方法 作为分组条件,
Collectors.maxBy方法 筛选 每个分组中符合条件的 数据

    原文作者:Java_HuiLong
    原文地址: https://blog.csdn.net/Java_HuiLong/article/details/59056611
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞