您好,登录后才能下订单哦!
Comparator比较器在Java中是一个接口,用于定义对象之间的排序规则。以下是一些常用的Comparator比较器方法:
compare(T o1, T o2)
o1
小于o2
。o1
等于o2
。o1
大于o2
。equals(Object obj)
Java 8引入了一些静态工厂方法来简化Comparator的创建:
Comparator.comparing(Function<? super T, ? extends U> keyExtractor)
Comparator.comparing(Person::getAge)
会根据Person对象的年龄进行比较。Comparator.comparing(Function<? super T, ? extends U> keyExtractor, Comparator<? super U, ? extends V> comparator)
Comparator.comparing(Person::getAge).thenComparing(Person::getName)
会先按年龄排序,年龄相同时再按名字排序。Comparator.naturalOrder()
Comparable
接口的对象。List<String> list = Arrays.asList("apple", "banana", "cherry"); list.sort(Comparator.naturalOrder());
Comparator.reverseOrder()
Comparable
接口的对象。list.sort(Comparator.reverseOrder());
Comparator.nullsFirst(Comparator<? super T> comparator)
Comparator.nullsFirst(Comparator.naturalOrder())
。Comparator.nullsLast(Comparator<? super T> comparator)
thenComparing(Comparator<? super T> other)
list.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
thenComparingInt(ToIntFunction<? super T> keyExtractor)
thenComparing
,但用于提取int类型的键。thenComparingLong(ToLongFunction<? super T> keyExtractor)
thenComparing
,但用于提取long类型的键。thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)
thenComparing
,但用于提取double类型的键。import java.util.*;
public class ComparatorExample {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 30)
);
// 按年龄排序,年龄相同时按名字排序
people.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
System.out.println(people);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + "(" + age + ")";
}
}
通过这些方法和技巧,你可以灵活地创建和使用Comparator来对集合中的对象进行排序。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。