本文需要实现的是 :按 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'}]