【发布时间】:2021-12-05 03:01:31
【问题描述】:
我已经使用排序包装器定义了一个比较器。你能解释一下为什么这段代码会抛出一个异常,“比较方法违反了它的一般合同!”?如果您能告诉我如何解决它,我将不胜感激。
Ordering<Foo> order = new Ordering<Foo>() {
@Override
public int compare(Foo left, Foo right) {
return getCompare(orderMap, left.getItemId(), right.getItemId());
}
};
Collections.sort(Foos, order);
获取比较:
private int getCompare(Map<Long, Integer> orderMap, Long leftId, Long rightId) {
int indexLeft = orderMap.get(leftId) == null ? -1 : orderMap.get(leftId);
int indexRight = orderMap.get(leftId) == null ? -1 : orderMap.get(rightId);
if (indexLeft < 0 || indexRight < 0) {
return 1;
}
return Integer.compare(indexLeft, indexRight);
}
【问题讨论】:
-
可能是传递性错误 - 请参阅 stackoverflow.com/questions/8327514/…
标签: java exception collections comparison comparator