gpt4 book ai didi

java - 如何在不排序的情况下使用 Comparator 进行升序、降序
转载 作者:太空狗 更新时间:2023-10-29 16:12:05 28 4
gpt4 key购买 nike

我试图得到答案,但每个关于比较器的问题都与排序有关。

我正在尝试将比较器与来自 dog.getAge()

的值一起使用

我的类(class)看起来像

public final class Dog implements Comparator<Dog>{
...
@Override
public int compare(Dog o1, Dog o2) {
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o2.getAge() > o1.getAge()) {
return 2;
}
return 0;
}
}

在主要 Activity 中,我尝试比较狗,但我认为问题是我不知道如何结束这种方法,

我还收到一个错误:在调度程序上抛出致命异常。

我正在尝试从 api 获取狗。

这是我在 MainActivity 中的方法

private List<Dog> dogsArray = new ArrayList<>();

private void checkAscendingOrDescendingDogsAge() {
Dog dog= new Dog();
for (int i = 0; i < dogsArray.size(); i++) {
dog.compare(dogsArray.get(i), dogsArray.get(i + 1));
}
}

最佳答案

无论您的预期用途是什么;这个在这里:

if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o2.getAge() > o1.getAge()) {
return 2;
}

不正确。这个想法是 compareTo() 返回负的、等于零的、正的结果。自己决定是否要更改该方法的契约(Contract)是没有意义的: 1 for o1 older than o2; o2 比 o1 大 2。这个接口(interface)和那个方法有一个定义良好的契约,你只需坚持它。除非你的目标是故意误导你的读者。但请放心,这会很快反噬你。

假设 getAge() 返回,例如 int,您只需将其替换为:

 return Integer.compare(o1.getAge(), o2.getAge())

然后技巧是定义其他方法,例如:

public boolean isOlder(Dog other) {
return compareTo(this, other) > 0;

例如。

然后你像这样使用它:

Dog buddy = new Dog(...
Dog sparky = new Dog(...

if (buddy.isOlder(sparky)

关于java - 如何在不排序的情况下使用 Comparator<Object> 进行升序、降序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738169/

28 4 0