21

我需要一些类implements Comparator,其中一个我想比较原始boolean(非Boolean)值。

如果它是一个布尔值,我只会return boolA.compareTo(boolB);返回 0、-1 或 1。但是如何使用原语来做到这一点?

4

5 回答 5

29

您可以查看它是如何实现的java.lang.Boolean,因为该类自然也使用原始布尔值:

public int compareTo(Boolean b) {
    return (b.value == value ? 0 : (value ? 1 : -1));
}

从 Java 7 开始,您可以简单地使用内置的静态方法Boolean.compare(a, b)

于 2012-11-05T09:54:22.183 回答
13

自 Java 7 以来,Marko Topolnik 在他的回答中展示的逻辑已经转移到另一种方法中,以公开一种比较原始的方法boolean

Javadoc 用于Boolean.compare(boolean x, boolean y)

public static int compare(boolean x, boolean y)

Compares two boolean values. The value returned is identical to 
what would be returned by:

    Boolean.valueOf(x).compareTo(Boolean.valueOf(y))
于 2015-05-04T23:44:03.840 回答
5

更好的方法和正确使用 Boolean-Adapter 类

public int compare(boolean lhs, boolean rhs) {
    return Boolean.compare(lhs, rhs);
}

编辑:

提示:这首先对“假”值进行排序。如果要反转排序,请使用:

(-1 * Boolean.compare(lhs, rhs))
于 2018-06-11T08:38:15.657 回答
2

您可以使用 java 的自动装箱功能来缓解此问题。您可以在此处阅读有关自动装箱的信息:Java 自动装箱

于 2012-11-05T10:04:13.447 回答
0

您可以通过以下方式比较两个原始布尔值 b1 和 b2。

(Boolean.valueOf(b1).equals(Boolean.valueOf(b2))

于 2014-11-07T11:55:10.827 回答