이 질문에는 이미 답변이 있습니다.
포인트 목록을 정렬해야합니다. 먼저 x 값과 y 값을 비교해야합니다. 그래서 thenComparing 메서드를 사용할 것이라고 생각했습니다.
Comparator<Point> cmp = Comparator.comparingInt(p -> p.x).thenComparingInt(p -> p.y);
하지만 계속 메시지가 나타납니다. 호환되지 않는 유형 : Comparator < Object > Comparator < 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);