Java Comparator (附带示例)2025年4月7日 | 阅读7分钟 Java Comparator 接口用于对用户定义类的对象进行排序。 此接口位于 java.util 包中,包含 2 个方法:compare(Object obj1,Object obj2) 和 equals(Object element)。 它提供了多种排序顺序,即您可以根据任何数据成员对元素进行排序,例如,学号、姓名、年龄或任何其他内容。 Java Comparator 接口的方法方法 | 描述 |
---|
public int compare(Object obj1, Object obj2) | 它比较第一个对象和第二个对象。 | public boolean equals(Object obj) | 它用于比较当前对象与指定对象。 | public boolean equals(Object obj) | 它用于比较当前对象与指定对象。 |
Collections 类Collections 类提供了对集合元素进行排序的静态方法。如果集合元素是 Set 或 Map,我们可以使用 TreeSet 或 TreeMap。但是,我们不能对 List 的元素进行排序。Collections 类也提供了对 List 类型元素进行排序的方法。 Collections 类用于排序 List 元素的的方法public void sort(List list, Comparator c): 用于通过给定的 Comparator 对 List 的元素进行排序。
Java Comparator 示例 (非泛型旧式)让我们来看一个根据年龄和姓名对 List 元素进行排序的示例。在此示例中,我们创建了 4 个 Java 类 - Student.java
- AgeComparator.java
- NameComparator.java
- Simple.java
Student.java 此类包含三个字段 rollno、name 和 age,以及一个参数化构造函数。 AgeComparator.java 此类定义基于年龄的比较逻辑。如果第一个对象的年龄大于第二个,我们返回一个正值。它可以是任何值,如 1、2、10。如果第一个对象的年龄小于第二个对象,我们返回一个负值,它可以是任何负值,如果两个对象的年龄相等,我们返回 0。 NameComparator.java 此类根据姓名提供比较逻辑。在这种情况下,我们使用 String 类的 compareTo() 方法,该方法内部提供了比较逻辑。 Simple.java 在此类中,我们通过按姓名和年龄排序来打印对象的值。 输出 Sorting by Name
106 Ajay 27
105 Jai 21
101 Vijay 23
Sorting by age
105 Jai 21
101 Vijay 23
106 Ajay 27
Java Comparator 示例 (泛型)Student.java AgeComparator.java NameComparator.java 此类根据姓名提供比较逻辑。在这种情况下,我们使用 String 类的 compareTo() 方法,该方法内部提供了比较逻辑。 Simple.java 在此类中,我们通过按姓名和年龄排序来打印对象的值。 输出 Sorting by Name
106 Ajay 27
105 Jai 21
101 Vijay 23
Sorting by age
105 Jai 21
101 Vijay 23
106 Ajay 27
Java 8 Comparator 接口Java 8 Comparator 接口是一个函数式接口,只包含一个抽象方法。现在,我们可以将 Comparator 接口用作 lambda 表达式或方法引用的赋值目标。 Java 8 Comparator 接口的方法方法 | 描述 |
---|
int compare(T o1, T o2) | 它比较第一个对象和第二个对象。 | static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor) | 它接受一个函数,该函数从类型 T 中提取一个可比较的排序键,并返回一个 Comparator该 Comparator 根据该排序键进行比较。 | static <T,U> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator) | 它接受一个函数,该函数从类型 T 中提取一个排序键,并返回一个 Comparator该 Comparator 使用指定的 Comparator 根据该排序键进行比较。 | static <T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor) | 它接受一个函数,该函数从类型 T 中提取一个 double 排序键,并返回一个 Comparator该 Comparator 根据该排序键进行比较。 | static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor) | 它接受一个函数,该函数从类型 T 中提取一个 int 排序键,并返回一个 Comparator该 Comparator 根据该排序键进行比较。 | static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor) | 它接受一个函数,该函数从类型 T 中提取一个 long 排序键,并返回一个 Comparator该 Comparator 根据该排序键进行比较。 | boolean equals(Object obj) | 它用于比较当前对象与指定对象。 | static <T extends Comparable<? super T>> Comparator<T> naturalOrder() | 它返回一个比较 Comparable 对象自然顺序的 Comparator。 | static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator) | 它返回一个将 null 视为小于非 null 元素的 Comparator。 | static <T> Comparator<T> nullsLast(Comparator<? super T> comparator) | 它返回一个将 null 视为大于非 null 元素的 Comparator。 | default Comparator<T> reversed() | 它返回包含给定 Comparator 逆序的 Comparator。 | static <T extends Comparable<? super T>> Comparator<T> reverseOrder() | 它返回包含自然顺序的逆序的 Comparator。 | default Comparator<T> thenComparing(Comparator<? super T> other) | 它返回一个具有另一个 Comparator 的字典序 Comparator。 | default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor) | 它返回一个具有提取可比较排序键的函数的字典序 Comparator。 | default <U> Comparator<T> thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator) | 它返回一个具有提取要与给定 Comparator 比较的键的函数的字典序 Comparator。 | default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor) | 它返回一个具有提取 double 排序键的函数的字典序 Comparator。 | default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor) | 它返回一个具有提取 int 排序键的函数的字典序 Comparator。 | default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor) | 它返回一个具有提取 long 排序键的函数的字典序 Comparator。 | Java 8 Comparator 示例让我们来看一个根据年龄和姓名对 List 元素进行排序的示例。 文件: Student.java 文件: TestSort1.java 输出 Sorting by Name
106 Ajay 27
105 Jai 21
101 Vijay 23
Sorting by Age
105 Jai 21
101 Vijay 23
106 Ajay 27
Java 8 Comparator 示例: nullsFirst() 和 nullsLast() 方法在这里,我们对包含 null 的元素列表进行排序。 文件: Student.java 文件: TestSort2.java 输出 Considers null to be less than non-null
105 null 21
106 Ajay 27
101 Vijay 23
Considers null to be greater than non-null
106 Ajay 27
101 Vijay 23
105 null 21
|