比较比较Int
问题描述:
我需要对点列表进行排序。首先,我需要比较x值,然后如果x值相等,则为y值。所以,我想我会用thenComparing方法:比较比较Int
Comparator<Point> cmp = Comparator.comparingInt(p -> p.x).thenComparingInt(p -> p.y);
但我不断收到消息:不兼容类型:比较<对象>不能转换到比较<点>。
我还有其他方法可以进行这种比较,它可以工作,但我不明白我在这里做错了什么。
答
此代码的工作:
Comparator<Point> cmp = Comparator.<Point> comparingInt(p -> p.x)
.thenComparingInt(p -> p.y);
我comparingInt
,其中明确宣布的p
类型的前只增加<Point>
拉姆达。这是必要的,因为由于方法链,Java无法推断出类型。
参见Generic type inference not working with method chaining?
这里是另一替代:
Comparator<Point> cmp = Comparator.comparingDouble(Point::getX)
.thenComparingDouble(Point::getY);
这里,类型可以没有任何问题地推断。但是,您需要使用双重比较,因为getX
和getY
会返回双倍值。我个人更喜欢这种方法。
答
尝试改变:
Comparator<Point> cmp = Comparator.comparingInt(p -> p.x).thenComparingInt(p -> p.y);
到
Comparator<Point> cmp = Comparator.comparingInt((Point p) -> p.x).thenComparingInt((Point p) -> p.y);
+0
是的,我做了测试,它工作得很好.. –
也许你需要通过书写(点)将它投射到一个点上。虽然不确定。 – Gendarme