Java 可比:isLessThan、isGreaterThan、isEqualTo 的辅助方法

Java Comparable: helper methods for isLessThan, isGreaterThan, isEqualTo

对于实现 Comparable 接口的对象 a 和 b,我想避免使用类似

的代码
if (a.compareTo(b) > 0) {
    ...
}

相反,我正在寻找像

这样的辅助方法
if (a.isGreaterThan(b)) {
    ...
}

这对我有很大帮助,因为我不必总是查找 compareTo(T o) 的 return 值的定义:

Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

真正有用的是 5 种不同的方法:

Instead of                  use potential helper method:

a.compareTo(b) < 0          a.isLessThan(b)
a.compareTo(b) <= 0         a.isLessOrEqualTo(b)
a.compareTo(b) == 0         a.isEqualTo(b)
a.compareTo(b) >= 0         a.isGreaterOrEqualTo(b)
a.compareTo(b) > 0          a.isGreaterThan(b)

JDK 或其他提供此类功能的库中是否有类似这样的辅助方法?

每个 object 都存在 equals 方法。其余的你必须自己创造。您可以创建一个具有这些方法的接口,这样所有 children 都将拥有它们。

这应该有效:

public interface IComparable<T> extends Comparable<T> {

    boolean isLessThan(T other);

    boolean isLessOrEqualTo(T other);

    boolean isGreaterOrEqualTo(T other);

    boolean isGreaterThan(T other);

}

您可以为上述每个方法添加默认方法。像这样:

public interface IComparable<T> extends Comparable<T> {

    default boolean isLessThan(T other) {
        return compareTo(other) < 0;
    }

    default boolean isLessOrEqualTo(T other) {
        return compareTo(other) <= 0;
    }

    default boolean isGreaterOrEqualTo(T other) {
        return compareTo(other) >= 0;
    }

    default boolean isGreaterThan(T other) {
        return compareTo(other) > 0;
    }

}

如果您记得的话,您不需要这些方法,通过将 compareTo 参数带到比较的右侧来进行心理替换就足够了,如下所示:

a.compareTo(b) < 0    ---->   a[.compareTo(...)] < b

因为就这么简单,所以通常没有人关心在图书馆中有任何更好的比较形式。 如果您仍然坚持一些更具可读性的表达形式,您可以使用 Java 8 中的默认方法来扩展 Comparable 接口,如下所示:

public interface ComparableDSL<T> extends Comparable<T> {
    default boolean isLessThan(T that) { 
         return compareTo(that) < 0;
    }
}