gpt4 book ai didi

java - 在 Array.sort() 中实现 Java 比较器

转载 作者:行者123 更新时间:2023-12-02 09:29:05 25 4
gpt4 key购买 nike

假设我有一个二维数组的数组,它代表我想要比较的点。例如,我可以比较距原点的距离。我能做的就是创建一个类 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.comparing(Point::getX).thenComparing(Point::getY)

没有理由使用更长的版本。它们的可读性较差,而且很容易出错。作为示例,这是一种可能的实现

(p1, p2) -> {
if(p1.x == p2.x) {
return p1.y.compareTo(p2.y);
}
return p1.x.compareTo(p2.x);
}

需要更长的时间才能了解那里发生了什么,不是吗?

关于java - 在 Array.sort() 中实现 Java 比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com