我收到以下错误:"比较方法违反了其总合同!" 使用以下比较器时,我无法使用jUnit复制异常.我想知道导致这个问题的原因以及如何复制它.有些其他例子有相同的问题,但没有如何复制它.
public class DtoComparator implements Comparator<Dto> {
@Override
public int compare(Dto r1, Dto r2) {
int value = 0;
value = r1.getOrder() - r2.getOrder();
if (value == 0 && !isValueNull(r1.getDate(), r2.getDate()))
value = r1.getDate().compareTo(r2.getDate());
return value;
}
private boolean isValueNull(Date date, Date date2) {
return date == null || date2 == null;
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下代码调用代码:
Collections.sort(dtos, new DtoComparator());
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
额外信息:错误似乎发生在Java utils内部的TimSort类中以及名为mergeLo的方法中.链接:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/TimSort.java#TimSort.mergeLo%28int%2Cint%2Cint%2Cint% 29