gpt4 book ai didi

java - 如何编写比较多个参数的比较器?

转载 作者:行者123 更新时间:2023-12-01 17:48:30 24 4
gpt4 key购买 nike

我正在尝试编写一个比较器来比较坐标类的两个对象。坐标类非常简单:

public class Coordinate {

private int x, y;

public Coordinate(int x, int y) {
this.x = x;
this.y = y;
}

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

}

现在我希望比较器比较 Cooperative 类的两个实例的 x 和 y 值。这是一个例子:
我有一个坐标 c1,其中 x = 42 和 y = 23。我的第二个坐标 c2 有 x = 23 和 y = 54。现在我将它们都放在 ArrayList 中,想要对列表进行排序。我想按如下方式排序:
具有最低 y 值的坐标始终位于最前面,当两个坐标具有相同的 y 值时,具有较低 x 值的坐标位于最前面。
示例:

c1 (y = 4, x = 5 ) < c2 (y = 4, x = 6) < c3 (y = 5, x = 2)  

那么我如何为此目的编写一个比较器?
非常感谢!

最佳答案

Comparator<Coordinate> c = Comparator.comparingInt(Coordinate::getY)
.thenComparingInt(Coordinate::getX);

您可以通过 thenComparingthenComparingX 构建复合比较器。

var list = List.of(
new Coordinate(6, 4),
new Coordinate(2, 5),
new Coordinate(5, 4)
);

list.sort(c);
System.out.println(list);

打印片段

[{y=4, x=5}, {y=4, x=6}, {y=5, x=2}]

关于java - 如何编写比较多个参数的比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52802592/

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