假设我们有以下员工列表:
List<Employee> employeeList = new ArrayList<>();
employeeList.add(new Employee(40000d, "Abhijeet","Rakshit"));
employeeList.add(new Employee(30000d, "Sunil","Sawant"));
employeeList.add(new Employee(20000d, "Abhijeet", "Ranade"));
employeeList.add(new Employee(40000d, "Srikanth", "Ranka"));
我们有重名,姓氏不同,工资也不同。
使用传统方法比较冗长,所以让我们以更简洁的方式来做。
使用比较器和
list.sort
方法。随后的thenComparing
调用仅在先前的比较返回相等时才被调用。对于决胜局,我更喜欢姓氏而不是薪水。如果需要,可以交换它们。
record Employee(double getSalary, String getFirstName, String getLastName) {
}
List<Employee> employeeList = new ArrayList<>();
employeeList.add(new Employee(40000, "Abhijeet","Rakshit"));
employeeList.add(new Employee(30000, "Sunil","Sawant"));
employeeList.add(new Employee(20000, "Abhijeet", "Ranade"));
employeeList.add(new Employee(40000, "Srikanth", "Ranka"));
employeeList.sort(Comparator.comparing(Employee::getFirstName)
.thenComparing(Employee::getLastName)
.thenComparing(Employee::getSalary));
employeeList.forEach(System.out::println);
版画
Employee[getSalary=40000.0, getFirstName=Abhijeet, getLastName=Rakshit]
Employee[getSalary=20000.0, getFirstName=Abhijeet, getLastName=Ranade]
Employee[getSalary=40000.0, getFirstName=Srikanth, getLastName=Ranka]
Employee[getSalary=30000.0, getFirstName=Sunil, getLastName=Sawant]
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class SortEmployeesJava8 {
public static void main(String args[]) {
Comparator<Employee> employeeNameComparator = Comparator.comparing(Employee::getName);
Comparator<Employee> employeeSalaryComparator = Comparator.comparing(Employee::getSalary);
Comparator<Employee> employeeLastNameComparator = Comparator.comparing(Employee::getLastName);
SortEmployeesJava8 test = new SortEmployeesJava8();
List<Employee> employeeList = test.getEmployeeList();
List<Employee> sortedEmployeeList = employeeList.stream()
.sorted(employeeNameComparator
.thenComparing(employeeLastNameComparator)
.thenComparing(employeeSalaryComparator))
.collect(Collectors.toList());
sortedEmployeeList.stream()
.forEach(e -> System.out.println("name : " + e.getName() + " " + e.getLastName() + " salary : " + e.getSalary()));
}
class Employee {
Double salary;
String name;
String lastName;
Employee(Double salary, String name, String lastName) {
this.salary = salary;
this.name = name;
this.lastName = lastName;
}
public Double getSalary() {
return this.salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
public List<Employee> getEmployeeList() {
List<Employee> employeeList = new ArrayList<>();
employeeList.add(new Employee(40000d, "Abhijeet", "Rakshit"));
employeeList.add(new Employee(30000d, "Sunil", "Sawant"));
employeeList.add(new Employee(20000d, "Abhijeet", "Ranade"));
employeeList.add(new Employee(40000d, "Srikanth", "Ranka"));
return employeeList;
}
}
打印
name : Abhijeet Rakshit salary : 40000.0
name : Abhijeet Ranade salary : 20000.0
name : Srikanth Ranka salary : 40000.0
name : Sunil Sawant salary : 30000.0