如何利用lambda+stream实现排序

本文需要实现的是 :按 subject排序号,subject 为空的放在最后面,并且把同一个学生下面的课程归类在一起,要求输出list,至于方法的使用就不具体细说了,相信看要用lambda的都应该了解了lambda的基本用法

Student 类 

private String name;
private String subject;

 测试方法

public static void main(String[] args) {
    List<Student> students = new ArrayList<>();

    Student s1 = new Student("刘**","语文");
    Student s2 = new Student("刘**", "数学");
    Student s3 = new Student("王**", "语文");
    Student s4 = new Student("王**", null);
    Student s5 = new Student("张**", "语文");
    Student s6 = new Student("张**", "数学");
    students.add(s1);
    students.add(s2);
    students.add(s3);
    students.add(s4);
    students.add(s5);
    students.add(s6);
    //先按科目排序,科目相等的情况下再按照学生姓名排序,最后分组 要用LinkHashMap 作为容器存放
    List<Student> students1 = new ArrayList<>();
    Map<String, List<Student>> collect = students.stream().sorted(Comparator.comparing(Student::getSubject, Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(Student::getName)).collect(Collectors.groupingBy(Student::getName,LinkedHashMap::new, Collectors.toList()));
    collect.values().forEach((List<Student> s)->students1.addAll(s));
    System.out.print(students1);

}

打印结果:

[Student{name='刘**', subject='数学'}, Student{name='刘**', subject='语文'}, Student{name='张**', subject='数学'}, Student{name='张**', subject='语文'}, Student{name='王**', subject='语文'}, Student{name='王**', subject='null'}]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值