对于相等的元素,解决比较器不 return 0

Solve Comparator does not return 0 for equal elements

有用信息:

IDE:IntelliJ JDK: 8u271

我有一个我不明白也不知道如何解决的警告。 警告:

Comparator does not return 0 for equal elements

警告突出显示

(a, b)

在这行代码中。

private final Comparator<Entity> renderSorter = (a, b) -> {
    if (a.getY() + a.getHeight() < b.getY() + b.getHeight())
        return -1;
    return 1;
};

警告的含义是什么,我该如何解决?

您必须添加一个案例来检查两个值是否相等比较器应该 return 0。现在它将 return -11.

private final Comparator<Entity> renderSorter = (a, b) -> {
    return Integer.compare(a.getY() + a.getHeight(), b.getY() + b.getHeight()); 
};

这将为您解决问题。将比较的责任委托给整数 class 比较方法。

Comparator接口的契约说:

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

该警告告诉您 Comparator 永远不会 return 为零,我想您可以通过检查代码看到这一点。

当两个 Entity 对象相等时,您可以通过将 Comparator return 设为零来解决警告,在 Comparator 的意义上,而不是实际检查两个平等对象。