gpt4 book ai didi

java - 如何使用 Java 8 中的自定义比较器接口(interface)对对象数组进行排序?

转载 作者:搜寻专家 更新时间:2023-11-01 02:02:33 24 4
gpt4 key购买 nike

比较器的自定义实现

@FunctionalInterface
public interface Comparator<T> {

int compare(T t1, T t2);

static <T> Comparator<T> comparing(
Function<T, Comparable> f){
return (p1, p2) -> f.apply(p1).compareTo(f.apply(p2));
}

default Comparator<T> thenComparing(
Comparator<T> cmp){
return (p1, p2) ->
this.compare(p1, p2) == 0 ?
cmp.compare(p1, p2) : this.compare(p1, p2);
}

default Comparator<T> thenComparing(
Function<T, Comparable> f){
Comparator<T> cmp = comparing(f);
return thenComparing(cmp);
}
}

我创建了一个包含三个字段的 Person 类,即 firstName、lastName 和 age,以及它们各自的 getter 和 setter。使用自定义 Comparator 类,我想对 main 中的一组人员进行排序,如下所示:

    Comparator<Person> cmp = Comparator
.comparing(Person::getLastName) // Extract Property and compare
.thenComparing(Person::getFirstName)
.thenComparing(Person::getAge);

Person arr[] = new Person[]{
new Person("Sean", "Gilmore", 22),
new Person("Aaron", "Reidy", 21),
new Person("Jane", "Kennedy", 53),
new Person("Mike", "English", 49)
};


Arrays.sort(arr, cmp);

但是Arrays.sort(arr, cmp);抛出编译错误 no instance of type variable T exists so that Comparator<Person> conforms to Comparator<? super T>

我被这个错误弄糊涂了,我想知道如何使用 cmp 对 Person 数组进行排序。比较器。

最佳答案

您可以像这样轻松地使您的Comparator适应JDK:

Arrays.sort(arr, cmp::compare);

我相信 Guava 在为 Java 8 改造之前推荐了一种类似的模式来调整它们的功能接口(interface)。

关于java - 如何使用 Java 8 中的自定义比较器接口(interface)对对象数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42208213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com