java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:408)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
Can someone explain why my comparator below sometimes throws the above exception.
Note: The id field in myObject is of type long.
Collections.sort(objectList, new Comparator<MyObject>() {
@Override
public int compare(final myObject myobject1, final MyObject myObject2) {
return (int)(myObject1.getId() - myObject2.getId());
}
});
Solution:
Based on the answer from @amit
return (int)(Long.compare(myObject1.getId(), myObject2.getId());