[DEV] 기록

[Java] "Comparison method violates its general contract!"

꾸준함. 2022. 7. 10. 20:50

개요

실수에 대해서 아래와 같이 정렬을 진행할 때 에러가 발생하면서 제목과 같은 에러 메시지가 콘솔에 떴습니다.

 

list.sort((o1, o2) -> {
    return o1 - o2 < 0 ? -1 : 1;
});

 

Comparison method violates its general contract!

 

원인

Stackoverflow 게시글에 의하면 부동소수점 산수를 하는 도중 예외가 발생하여 에러가 발생했을 확률이 높다고 합니다.

 

 

해결 방법

Double에서 제공하는 compareTo 메서드를 사용하면 정상적으로 작동하는 것을 확인할 수 있습니다.

 

list.sort((o1, o2) -> {
    return Double.compare(o1, o2);
});

 

참고

https://stackoverflow.com/questions/8327514/comparison-method-violates-its-general-contract

 

"Comparison method violates its general contract!"

Can someone explain me in simple terms, why does this code throw an exception, "Comparison method violates its general contract!", and how do I fix it? private int compareParents(Foo s1, Foo s2) {...

stackoverflow.com

반응형