当你想对一个类的对象列表进行排序时,可以使用 Comparator 接口。您不需要在对象需要排序的类上实现 Comparator。您可以创建一个单独的类并实现 Comparator 接口,如下所示。
例如:
package com.arpit.java2blog; import java.util.Comparator; public class EmployeeSortByIdComparator implements Comparator{ @Override public int compare(Employee e1, Employee e2) { return e1.getEmpId()-e2.getEmpId(); } }
您可以根据需要排序的对象的不同属性使用不同的排序逻辑。
例如: 假设您想按姓名对员工列表进行排序,您可以使用下面的 ocde 来做到这一点。
Employee e1= new Employee(4, "John", 20); Employee e2= new Employee(3, "Martin", 40); Employee e3= new Employee(1, "Mary", 28); Employee e4= new Employee(2, "Andrew", 35); List<Employee> listofEmployees=new ArrayList<>(); listofEmployees.add(e1); listofEmployees.add(e2); listofEmployees.add(e3); listofEmployees.add(e4); System.out.println("Before Sorting by name: "); for (Employee e:listofEmployees) { System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName()); } Collections.sort(listofEmployees,new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getName().compareTo(o2.getName()); } }); System.out.println("After Sorting by name: "); for (Employee e:listofEmployees) { System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName()); }
创建一个名为 Employee.java 的类,该类将包含 empId、name 和 age。
1.Employee.java
package com.arpit.java2blog; public class Employee { private int empId; private String name; private int age; public Employee(int empId, String name, int age) { super(); this.empId = empId; this.name = name; this.age = age; } public int getEmpId() { return empId; } public void setEmpId(int empId) { this.empId = empId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
创建一个名为“EmployeeSortByIdComparator”的类。此类将具有按 empId 对员工列表进行排序的逻辑。 2.EmployeeSortByIdComparator.java
让我们创建一个主类,它具有创建对象列表并根据 empId 对其进行排序的逻辑。
3.EmployeeComparatorMain.java
package com.arpit.java2blog; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class EmployeeComparatorMain { public static void main(String[] args) { Employee e1= new Employee(4, "John", 20); Employee e2= new Employee(3, "Martin", 40); Employee e3= new Employee(1, "Mary", 28); Employee e4= new Employee(2, "Andrew", 35); List<Employee> listofEmployees=new ArrayList<>>(); listofEmployees.add(e1); listofEmployees.add(e2); listofEmployees.add(e3); listofEmployees.add(e4); System.out.println("Before Sorting by empId: "); for (Employee e:listofEmployees) { System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName()); } Collections.sort(listofEmployees,new EmployeeSortByIdComparator()); System.out.println("After Sorting by empId: "); for (Employee e:listofEmployees) { System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName()); } } }
输出:
Before Sorting by empId: Employee Id: 4|| name: John Employee Id: 3|| name: Martin Employee Id: 1|| name: Mary Employee Id: 2|| name: Andrew After Sorting by empId: Employee Id: 1|| name: Mary Employee Id: 2|| name: Andrew Employee Id: 3|| name: Martin Employee Id: 4|| name: John
Comparator 优于可比较的优点之一是您可以创建匿名比较器,即您不需要为对象需要排序的类实现 Comparable 接口。 让我们通过示例来了解更多: 我们将使用匿名类按名称对员工列表进行排序。
ComparatorMain.java
package com.arpit.java2blog; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class EmployeeComparatorMain { public static void main(String[] args) { Employee e1= new Employee(4, "John", 20); Employee e2= new Employee(3, "Martin", 40); Employee e3= new Employee(1, "Mary", 28); Employee e4= new Employee(2, "Andrew", 35); List<Employee> listofEmployees=new ArrayList<>>(); listofEmployees.add(e1); listofEmployees.add(e2); listofEmployees.add(e3); listofEmployees.add(e4); System.out.println("Before Sorting by name: "); for (Employee e:listofEmployees) { System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName()); } Collections.sort(listofEmployees,new Comparator<Employee>() { @Override public int compare(Employee o1, Employee o2) { return o1.getName().compareTo(o2.getName()); } }); System.out.println("After Sorting by name: "); for (Employee e:listofEmployees) { System.out.println("Employee Id: "+e.getEmpId()+"|| name: "+e.getName()); } } }
Before Sorting by name: Employee Id: 4|| name: John Employee Id: 3|| name: Martin Employee Id: 1|| name: Mary Employee Id: 2|| name: Andrew After Sorting by name: Employee Id: 2|| name: Andrew Employee Id: 4|| name: John Employee Id: 3|| name: Martin Employee Id: 1|| name: Mary
正如您在此处看到的,我们使用匿名比较器按姓名对员工列表进行排序。我们没有在这里创建比较器特定的类。 这就是 Java 中的 Comparator 的全部内容。
原文链接:https://codingdict.com/