假设我们有以下 Employee 类和
List
的 Employee
s:
class Employee{
String firstName;
String lastName;
Double salary;
Employee(Double salary, String firstName, String lastName){
this.salary = salary;
this.firstName = firstName;
this.lastName = lastName;
}
// getter and setters
}
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"));
我想按
first name
排序,如果相等,按last name
,然后按salary
。
使用比较器和
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]
**在下面的课程中有两种方法。一个使用 stream.sorted,另一个使用 list.sort 方法。
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> employeeLastNameComparator = Comparator.comparing(Employee::getLastName);
Comparator<Employee> employeeSalaryComparator = Comparator.comparing(Employee::getSalary);
SortEmployeesJava8 test = new SortEmployeesJava8();
List<Employee> employeeList = test.getEmployeeList();
System.out.println("Sort by Name Output \n");
//List<Employee> sortedByNameEmployeeList =
employeeList
.sort(employeeNameComparator
.thenComparing(employeeLastNameComparator));
//.collect(Collectors.toList());
employeeList.stream()
.forEach(e -> System.out.println("name : " + e.getName() + " " + e.getLastName()));
System.out.println("\n Sort by Salary Output \n");
List<Employee> sortedBySalaryEmployeeList = employeeList.stream()
.sorted(employeeSalaryComparator)
.collect(Collectors.toList());
sortedBySalaryEmployeeList.stream()
.forEach(e -> System.out.println("name : " + e.getName() + " " + e.getLastName()+" Salary :"+e.getSalary()));
employeeList.sort(Comparator.comparing(Employee::getName)
.thenComparing(Employee::getLastName)
.thenComparing(Employee::getSalary));
System.out.println("\n Sort by using sort function of list ->Output \n");
employeeList.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;
}
}
```
Sort by Name Output
name : Abhijeet Rakshit
name : Abhijeet Ranade
name : Srikanth Ranka
name : Sunil Sawant
Sort by Salary Output
name : Abhijeet Ranade Salary :20000.0
name : Sunil Sawant Salary :30000.0
name : Abhijeet Rakshit Salary :40000.0
name : Srikanth Ranka Salary :40000.0
Sort by using sort function of list ->Output
name : Abhijeet Rakshit Salary :40000.0
name : Abhijeet Ranade Salary :20000.0
name : Srikanth Ranka Salary :40000.0
name : Sunil Sawant Salary :30000.0
```