6

この質問にはすでに答えがあります。

ポイントのリストを並べ替える必要があります。最初にx値を比較し、次にx値が等しい場合はy値を比較する必要があります。そのため、thenComparingメソッドを使用することにしました。

Comparator<Point> cmp = Comparator.comparingInt(p -> p.x).thenComparingInt(p -> p.y);

しかし、私はメッセージを受け取り続けています:互換性のない型:Comparator< Object>コンパレータ< Point>に変換できません。

私はこの比較をすることができる他の方法があります、そして、それは働きます、しかし、私は私がここで間違っていることを理解していません。


  • (Point)と書くことでそれを点にキャストする必要があるかもしれません。まったくわかりません、でも。 - Gendarme

2 답변


11

このコードはうまくいきます:

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そしてgetYdouble値を返します。私は個人的にこのアプローチを好みます。


3

変更してみてください。

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);


  • はい、私はそれをテストしました、そして、それはうまくいきました.. - Darshan Mehta

リンクされた質問


関連する質問

最近の質問