@Data
publicclassStudent{private String name;private int grade;private Date time;private int age;
@Data
publicclassMid{private int grade;private Date time;publicMid(int grade, Date time){this.grade = grade;this.time = time;}}public Mid getMid(){returnnewMid(grade, time);}}
测试
@Test
voidtestGroup(){
List<Student> list =newArrayList<>();
Random r =newRandom(3);for(int i =0; i <10; i++){
Student s =newStudent();
int grade = r.nextInt(5);
Date time =newDate();
long now = time.getTime()- grade *10000;
time.setTime(now);
s.setTime(time);
s.setGrade(grade);
s.setAge(i);
s.setName("Tom"+ i);
list.add(s);}for(Student student : list){
System.out.println("_____________");
System.out.println(student.getName());
System.out.println(student.getAge());
System.out.println(student.getGrade());
System.out.println(newSimpleDateFormat("yyyy-MM-dd HH:ss:mm").format(student.getTime()));}
TreeMap<Student.Mid, List<Student>> collect = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.groupingBy(Student::getMid,()->newTreeMap<>((a, b)->{if(a.toString().equals(b.toString())){return0;}else{if(a.getTime().before(b.getTime())){return1;}return-1;}}),
Collectors.toList()));}
多字段分组并按分组字段进行排序将分组字段定义为内部类的属性,并增加方法getMid()测试将分组字段定义为内部类的属性,并增加方法getMid()@Datapublic class Student { private String name; private int grade; private Date time; private int age; @Data public class Mid { private int grade