Java 实现基本布尔类型的比较器?

Java 实现基本布尔类型的比较器?,java,comparator,primitive-types,Java,Comparator,Primitive Types,我需要一些类实现Comparator,对于其中一个类,我要比较基本布尔值(而不是布尔值) 如果它是一个Boolean,我会返回boolA.compareTo(boolB)将返回0、-1或1。但是如何使用基元实现这一点呢?您可以查看它是如何为实现的,因为该类自然也使用基元布尔: public int compareTo(Boolean b) { return (b.value == value ? 0 : (value ? 1 : -1)); } 从Java7开始,您可以简单地使用内置的

我需要一些类
实现Comparator
,对于其中一个类,我要比较基本
布尔值(而不是
布尔值)


如果它是一个Boolean,我会
返回boolA.compareTo(boolB)将返回0、-1或1。但是如何使用基元实现这一点呢?

您可以查看它是如何为实现的,因为该类自然也使用基元布尔:

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

从Java7开始,您可以简单地使用内置的静态方法。

您可以使用Java的自动装箱功能来缓解这个问题。您可以在此处阅读有关自动装箱的内容:

您可以通过以下方式比较两个基本布尔值b1和b2


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

自Java 7以来,该逻辑已转移到另一个方法中,以公开一种比较原语
Boolean
的方法

:

公共静态整数比较(布尔x,布尔y)
比较两个布尔值。返回的值与
将通过以下方式返回什么:
Boolean.valueOf(x).compareTo(Boolean.valueOf(y))

布尔适配器类的更好方法和正确使用

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

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

(-1 * Boolean.compare(lhs, rhs))

你听说过自动装箱吗?@stackmonster自动装箱的性能稍有下降,所以OP可能仍然喜欢编写原始代码。Comparator不接受基元类型。这就是问题所在。@MarkoTopolnik尽可能地
布尔值
缓存对象时,自动装箱的成本可能不会像你预期的那么高。注意:尽可能地
byte
也会被缓存。@PeterLawrey是的,我考虑到了这一点。命中率很小(必须取消引用
Boolean
常量),可能不值得额外的代码。所以总结一下,现在连JDK都是通过自动装箱来实现的(从7开始)。@Priiduemre:不是。源代码是这样的(至少在Java 8中是这样):公共静态整型比较(布尔x,布尔y){return(x==y)?0:(x?1:-1);}@PriiduNeemre是的,Wim Deblauwe是正确的。Javadoc声明,如果将它们作为对象进行比较,结果是相同的。如果查看Oracle JDK中的源代码,您会发现Oracle实现是相同的。或者您可以简单地使用Boolean.valueof(Boolean)。你有没有想过使用
Boolean.valueOf(a).compareTo(Boolean.valueOf(b))
?这是一个非常复杂的问题,而且比使用
Boolean.compare(a,b)
要慢。或者你可以简单地使用
Boolean.compare(rhs,lhs)