使用外部比较器Comparator进行排序
public class ComparatorTest {
public static void main(String[] args) {
Employee e1 = new Employee("John", 25, 3000, 9922001);
Employee e2 = new Employee("Ace", 22, 2000, 5924001);
Employee e3 = new Employee("Keith", 35, 4000, 3924401);
List<Employee> employees = new ArrayList<>();
employees.add(e1);
employees.add(e2);
employees.add(e3);
//sort 对象接收一个 Comparator 函数式接口,可以传入一个lambda表达式
employees.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
Collections.sort(employees, (o1, o2) -> o1.getName().compareTo(o2.getName()));
employees.forEach(System.out::println);
}
}
@Data
class Employee {
String name;
int age;
double salary;
long mobile;
public Employee(String name, int age, double salary, long mobile) {
this.name = name;
this.age = age;
this.salary = salary;
this.mobile = mobile;
}
}
运行结果:
Employee(name=Ace, age=22, salary=2000.0, mobile=5924001)
Employee(name=John, age=25, salary=3000.0, mobile=9922001)
Employee(name=Keith, age=35, salary=4000.0, mobile=3924401)
使用 Comparator.comparing 进行排序
方法一
//sort 对象接收一个 Comparator 函数式接口,可以传入一个lambda表达式
employees.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
Collections.sort(employees, (o1, o2) -> o1.getName().compareTo(o2.getName()));
employees.forEach(System.out::println);
/**
* Comparator.comparing 方法的使用
*
* comparing 方法接收一个 Function 函数式接口 ,通过一个 lambda 表达式传入
*
*/
employees.sort(Comparator.comparing(e -> e.getName()));
/**
* 该方法引用 Employee::getName 可以代替 lambda表达式
*/
employees.sort(Comparator.comparing(Employee::getName));
方法二
创建一个自定义的比较器
Collections.sort(employees, Comparator.comparing(
Employee::getName, (s1, s2) -> {
return s2.compareTo(s1);
}));
reversed()
Collections.sort(employees, Comparator.comparing(Employee::getName).reversed());
使用 Comparator.thenComparing 排序
Collections.sort(employees, Comparator.comparing(Employee::getAge).thenComparing(Employee::getName));