我写了类似
的内容@Override public int compareTo(Cuboid that) {
return -ComparisonChain.start()
.compare(this.d0, that.d0)
.compare(this.d1, that.d1)
.compare(this.d2, that.d2)
.result();
}
为了扭转顺序,我只是否定了结果,但现在我发现文件说错了
结束此比较链并返回其结果:具有该值的值 与链中第一个非零比较结果相同的符号,如果是,则为零 每个结果都是零。
所以Integer.MIN_VALUE
是允许的返回值,然后否定失败。在源代码中,我可以看到只返回-1,0和+1,但这并不是我想要依赖的东西。
而不是否定我可以交换所有操作数。简单而丑陋,但我很好奇是否有更好的解决方案。
答案 0 :(得分:1)
答案 1 :(得分:1)
可能比撤消compare
参数更清晰的一个选项是将每对参数与其自然顺序相反进行比较:
.compare(this.d0, that.d0, Ordering.natural().reverse())
答案 2 :(得分:0)
也许这个?
int temp = ComparisonChain.start()
.compare(this.d0, that.d0)
.compare(this.d1, that.d1)
.compare(this.d2, that.d2)
.result();
return temp == Integer.MIN_VALUE ? Integer.MAX_VALUE : -temp;
答案 3 :(得分:0)
实际上是一个不使用浮点的signum函数,即Integer#signum(int)
,它比Math.signum
的{{1}}快约3.5倍,而double
。< / p>
出于好奇,最快的解决方案是
return -((x&1) | (x>>1));
但只有约10%。