您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在Java中,Comparator
接口用于定义对象之间的排序顺序。Comparator
接口提供了多种方法来比较两个对象,其中thenComparing
方法是一个非常有用的方法,它允许你在主比较器(primary comparator)的基础上添加一个次要比较器(secondary comparator),以便在主比较器的结果相等时进行进一步的比较。
thenComparing
方法概述thenComparing
方法有多个重载版本,可以接受不同类型的参数,包括:
Comparator<? super T> other
Comparator<? super T> other, Comparator<? super T> second
Comparator<? super T> other, Function<? super T, ? extends U> keyExtractor
Comparator<? super T> other, Comparator<? super U> second, Comparator<? super T, ? extends U> keyExtractor
Comparator<? super T> other, Comparator<? super U> second, Function<? super T, ? extends U> keyExtractor, Comparator<? super U, ? extends V> third
Comparator<T> thenComparing(Comparator<? super T> other)
other
: 另一个Comparator
实例,用于在主比较器的结果相等时进行比较。返回一个新的Comparator
,该比较器首先使用主比较器进行比较,如果主比较器的结果相等,则使用other
比较器进行比较。
假设我们有一个Person
类,包含name
和age
属性,我们希望先按age
排序,如果age
相同,则按name
排序。
import java.util.Arrays;
import java.util.Comparator;
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30),
new Person("David", 25)
};
Comparator<Person> ageComparator = Comparator.comparingInt(Person::getAge);
Comparator<Person> nameComparator = Comparator.comparing(Person::getName);
Comparator<Person> combinedComparator = ageComparator.thenComparing(nameComparator);
Arrays.sort(people, combinedComparator);
for (Person person : people) {
System.out.println(person);
}
}
}
输出结果:
Person{name='Bob', age=25}
Person{name='David', age=25}
Person{name='Alice', age=30}
Person{name='Charlie', age=30}
ageComparator
是一个按年龄排序的比较器。nameComparator
是一个按名字排序的比较器。combinedComparator
是一个组合比较器,首先使用 ageComparator
进行比较,如果年龄相同,则使用 nameComparator
进行比较。Arrays.sort
方法对 people
数组进行排序,传入 combinedComparator
。通过这种方式,你可以灵活地组合多个比较器,实现复杂的排序逻辑。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。