如何按姓名对员工进行排序,如果姓名重复,我们将使用 Java8 功能按姓氏或薪水对他们进行排序

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

假设我们有以下员工列表:

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"));

我们有重名,姓氏不同,工资也不同。

使用传统方法比较冗长,所以让我们以更简洁的方式来做。

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

使用比较器和

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]



-1
投票
    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

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