【发布时间】:2019-09-26 13:22:33
【问题描述】:
假设我有一个二维数组,代表我想要比较的点。例如,我可以比较与原点的距离。我能做的是创建一个类Point:
class Point implements Comparable<Point>{
// class variables, constructor
public int compareTo(Point p) {
return (x*x + y*y).compareTo(p.x*p.x + p.y*p.y);
}
}
并用所有点填充Point 类型的数组,然后使用Array.sort(pointsArray)。
这也可以通过以下方式完成:
1) Arrays.sort(points, Comparator.comparing(p -> p[0]*p[0] + p[1]*p[1]));
或
2) Arrays.sort(points, (p1, p2) -> p1[0]*p1[0] + p1[1]*p1[1] - p2[0]*p2[0] - p2[1]*p2[1]);
不创建任何新的数据类型。 解释可以在this问题中找到。
现在,如果我需要先比较 x 坐标,如果比较结果没有差异,再比较 y 坐标,即:
class Point implements Comparable<Point>{
// class variables, constructor
public int compareTo(Point p) {
int cmp = x.compareTo(p.x);
if(cmp == 0) return y.compareTo(p.y);
return cmp;
}
}
如何在 1) 和 2) 中翻译?
【问题讨论】:
-
Comparator.<Point>comparingInt(p -> p.x).thenComparingInt(p -> p.y)。 (或comparingDouble,或其他)。
标签: java sorting compare comparison