Java 中的匿名比较器
Sheeraz Gul
2023年10月12日
在 Java 中,我们可以通过两种方式创建匿名比较器:一种使用匿名类,另一种使用 Lambda 表达式。本教程演示了如何在 Java 中创建匿名比较器。
在 Java 中使用匿名类的匿名比较器
要使用匿名类创建匿名比较器,请按照以下步骤操作。
-
首先,创建一个用户定义的类。
-
然后,创建另一个将用于比较器对象的类。这个类将包括一个带有
sort
方法的collection
类。 -
现在,使用匿名类,创建比较器对象,然后在比较器对象的帮助下实现比较方法。
-
Collections
类中的Sort
方法将通过传递对象来调用。 -
根据需要打印或使用分类信息。
让我们根据上述步骤在 Java 中尝试一个示例。
package delftstack;
import java.util.*;
class Employee {
String name;
double salary;
Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
}
public class Anonymous_Comparator {
public static void main(String args[]) {
ArrayList<Employee> Employee_List = new ArrayList<Employee>();
Employee_List.add(new Employee("Mike", 3000));
Employee_List.add(new Employee("Michelle", 2500));
Employee_List.add(new Employee("Tina", 4000));
Employee_List.add(new Employee("Shawn", 5000));
Employee_List.add(new Employee("Jack", 4500));
Employee_List.add(new Employee("Jenny", 3500));
Collections.sort(Employee_List, new Comparator<Employee>() {
public int compare(Employee employee1, Employee employee2) {
if (employee1.salary < employee2.salary) {
return 1;
}
return -1;
}
});
System.out.println("Name\tSalary");
System.out.println("---------------------");
for (Employee Employee : Employee_List) {
System.out.println(Employee.name + " = " + Employee.salary);
}
}
}
上面的代码为 Employee
类创建了一个匿名比较器,并根据薪水对 Employee
列表进行排序。
见输出:
Name Salary
---------------------
Shawn = 5000.0
Jack = 4500.0
Tina = 4000.0
Jenny = 3500.0
Mike = 3000.0
Michelle = 2500.0
在 Java 中使用 Lambda 表达式的匿名比较器
要使用 lambda 表达式创建匿名比较器,请按照以下步骤操作。
-
首先,创建一个用户定义的类。
-
然后,创建另一个将用于比较器对象的类。这个类将包括一个带有
sort
方法的collection
类。 -
现在,使用 lambda 表达式,创建比较器对象接口,然后在比较器接口的帮助下实现
compare
方法。 -
Collections
类中的Sort
方法将通过传递对象来调用。 -
根据需要打印或使用分类信息。
让我们根据上述步骤在 Java 中尝试一个示例。
package delftstack;
import java.util.*;
class Employee {
String name;
double salary;
Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
}
public class Anonymous_Comparator {
public static void main(String args[]) {
ArrayList<Employee> Employee_List = new ArrayList<Employee>();
Employee_List.add(new Employee("Mike", 3000));
Employee_List.add(new Employee("Michelle", 2500));
Employee_List.add(new Employee("Tina", 4000));
Employee_List.add(new Employee("Shawn", 5000));
Employee_List.add(new Employee("Jack", 4500));
Employee_List.add(new Employee("Jenny", 3500));
Collections.sort(Employee_List, (employee1, employee2) -> { // Using Lambda Expressions
if (employee1.salary < employee2.salary) {
return 1;
}
return -1;
});
System.out.println("Name\tSalary");
System.out.println("---------------------");
for (Employee Employee : Employee_List) {
System.out.println(Employee.name + " = " + Employee.salary);
}
}
}
上面的代码将在匿名比较器中使用 lambda 表达式对 Employee
进行排序。见输出:
Name Salary
---------------------
Shawn = 5000.0
Jack = 4500.0
Tina = 4000.0
Jenny = 3500.0
Mike = 3000.0
Michelle = 2500.0
我们创建了数据类来理解问题,但这些比较器也可以轻松应用于内置类型。
作者: Sheeraz Gul
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook