lambda排序小记
一、按照几个字段分别排序:
Student:
package com.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@AllArgsConstructor
public class Student {
private String name;
private int age;
private String classroom;
}
package com.test.lamdba;
import com.model.Student;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class TestComparator {
public static void main(String[] args) {
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("zhangsan", 10, "A"));
studentList.add(new Student("wangwei", 12, "D"));
studentList.add(new Student("wangwei", 11, "D"));
studentList.add(new Student("lisi", 14, "F"));
studentList.add(new Student("lisi", 14, "C"));
sort(studentList);
System.out.println(studentList);
}
/**
* 先按学生的姓名自然排序
* 再按年龄排序
* 再按班级号逆序排序
*
* @param studentList
*/
private static void sort(List<Student> studentList) {
studentList.sort(Comparator.comparing(Student::getName, Comparator.naturalOrder()) //这样去掉naturalOrder其实也一样,因为natureOrder的排序调的就是String的compareTo
.thenComparingInt(Student::getAge)
.thenComparing(Student::getClassroom, Comparator.reverseOrder())
);
}
}
打印:
[
Student(name=lisi, age=14, classroom=F),
Student(name=lisi, age=14, classroom=C),
Student(name=wangwei, age=11, classroom=D),
Student(name=wangwei, age=12, classroom=D),
Student(name=zhangsan, age=10, classroom=A)
]
--
浙公网安备 33010602011771号