如何按姓名对员工进行排序,如果我们有重复的姓名,我们将按姓氏对他们进行排序,以及如何按薪水进行排序

问题描述 投票:0回答:2

假设我们有以下 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

java java-8 comparator
2个回答
3
投票

使用比较器和

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]



-2
投票

**在下面的课程中有两种方法。一个使用 stream.sorted,另一个使用 list.sort 方法。

  1. 当您不想修改原始集合,同时又想使用流操作(如收集或过滤)时,第一种方法将很有用。
  2. 第二种方法是更快的方法,并且总是会修改原始列表**
   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
       ```


© www.soinside.com 2019 - 2024. All rights reserved.