我想知道是否可以在一行中编写此方法。我需要使用x坐标比较y坐标和断开关系。
// comparing y-coordinates and breaking ties by x-coordinates
public int compareTo(Point p) {
if (y < p.y) {
return -1;
}
if (y > p.y) {
return 1;
}
if (x < p.x) {
return -1;
}
if (x > p.x) {
return 1;
}
return 0;
}
“注意。问题是有兴趣的,看是否有任何原始的开箱即用的解决方案。很明显,提出了 解决方案很好“
答案 0 :(得分:3)
这应该有用(但我不推荐它以便于阅读):
return y < p.y ? -1 : y > p.y ? 1 : x < p.x ? -1 : x > p.x ? 1 : 0;
我没有费心去检查,但我猜测编译器会生成与原始代码完全相同的字节代码。
答案 1 :(得分:2)
假设您不关心返回值的大小,只关注它的符号,您可以这样做:
return y == p.y ? x - p.x : y - p.y;
编辑:正如Ted Hopp指出的那样,这种方法只有在减法不溢出时才有效。如果您知道x
和y
始终为正,或者它们之间的差异始终小于Integer.MAX_VALUE
,那么您可以使用此版本。
这是另一个应该适用于所有输入的替代方案:
return y == p.y ? ((Integer) x).compareTo(p.x) : ((Integer) y).compareTo(p.y);
如果您正在使用Java 1.7,则可以使用更简单的
return y == p.y ? Integer.compare(x, p.x) : Integer.compare(y, p.y);