この質問にはすでに答えがあります。
ポイントのリストを並べ替える必要があります。最初にx値を比較し、次にx値が等しい場合はy値を比較する必要があります。そのため、thenComparingメソッドを使用することにしました。
Comparator<Point> cmp = Comparator.comparingInt(p -> p.x).thenComparingInt(p -> p.y);
しかし、私はメッセージを受け取り続けています:互換性のない型:Comparator< Object>コンパレータ< Point>に変換できません。
私はこの比較をすることができる他の方法があります、そして、それは働きます、しかし、私は私がここで間違っていることを理解していません。
このコードはうまくいきます:
Comparator<Point> cmp = Comparator.<Point> comparingInt(p -> p.x)
.thenComparingInt(p -> p.y);
追加しただけ<Point>
前comparingInt
の型を明示的に宣言するp
ラムダメソッドチェーンのため、Javaは型を推測できないため、これは必要です。
また見なさいジェネリック型推論はメソッドチェーンでは動作しませんか?
これは他の選択肢です。
Comparator<Point> cmp = Comparator.comparingDouble(Point::getX)
.thenComparingDouble(Point::getY);
ここで、型は問題なく推論できます。ただし、二重比較を使用する必要があります。getX
そしてgetY
double値を返します。私は個人的にこのアプローチを好みます。
変更してみてください。
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);