gpt4 book ai didi

Java排序与比较

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:33 25 4
gpt4 key购买 nike

我有一个 ArrayListPerson对象。 Personname , ageheight .我的目标是对 ArrayList<Person> 进行排序.我已经实现了 Comparable<Person>并定义了 compareTo()但是当我尝试对它进行排序时,它给了我这个错误:

The method sort(Comparator) in the type ArrayList is not applicable for the argument ()"

我的理解是,如果你实现 Comparable 然后定义 compareTo其他一切都为您神奇地完成了。

谁能解释一下这是如何工作的以及为什么我会收到此错误?

最佳答案

我的猜测是您的代码如下所示:

ArrayList<Person> people = ...;
people.sort();

查看 ArrayList 的 JavaDoc .你看到一个方法了吗public void sort() (没有参数)? - 没有这样的方法。

这就是错误的意思:The method sort(Comparator) in the type ArrayList is not applicable for the argument () -- 有一个方法 sort(Comparator) , 但您没有提供与其匹配的参数。

假设Person工具 Comparable (因此有一个 compareTo() 方法),你可以使用 Collections.sort() , 排序任意 List<Comparable>

Collections.sort(people);

这是因为 Collections有一个静态方法:

static <T extends Comparable<? super T>> void sort(List<T> list);

(它还有一个 sort(List<T> list, Comparator<T> comparator) )

... 或者您可以将比较器传递给 List.sort() ,这对于 Java 8 lambdas 来说非常简单:

people.sort((a,b) -> a.compareTo(b));

(或者,如果您更喜欢旧样式):

people.sort(new Comparator<String>() {
@Override
public int compare(String a, String b) {
return a.compareTo(b);
}
});

(实际上从 Java 8 开始,这个比较器由标准库提供,如 Comparator.naturalOrder() )

比较器的要点是您可以根据不同的标准进行排序。例如:

people.sort((a,b) -> a.lastName().compareTo(b.lastName()));
people.sort((a,b) -> a.lastName().compareToIgnoreCase(b.lastName()));
people.sort((a,b) -> Integer.compare(a.age(),b.age()));
// etc.

... 或使用 Comparator 中的方法:

people.sort(Comparator.comparing(Person::lastName));
people.sort(Comparator.comparing(Person::lastName)
.thenComparing(Person::firstName));

关于Java排序与比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226375/

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