6

이 질문에는 이미 답변이 있습니다.

포인트 목록을 정렬해야합니다. 먼저 x 값과 y 값을 비교해야합니다. 그래서 thenComparing 메서드를 사용할 것이라고 생각했습니다.

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

하지만 계속 메시지가 나타납니다. 호환되지 않는 유형 : Comparator < Object > Comparator < 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);

여기서 유형은 문제없이 유추 될 수 있습니다. 그러나 이중 비교를 사용해야합니다.getXgetYdouble 값을 반환합니다. 나는 개인적으로이 방법을 선호한다.


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

연결된 질문


관련된 질문

최근 질문