在一个 android 应用程序中,我有一个位置列表。我需要根据它们与用户位置的距离对它们进行排序。为此,我实现了一个自定义比较器:
Collections.sort(houseList, new Comparator<HouseEntity>()
{
@Override
public int compare(HouseEntity house1, HouseEntity house2)
{
if(userLocation == null) return 0;
return (int) (userLocation.distanceTo(house1.location) - userLocation.distanceTo(house2.location));
}
});
它在我所做的所有测试中运行良好。但是,一些用户因以下错误而崩溃:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
在阅读了关于 SO 的所有其他相同问题后,我得出结论,当逻辑中可能存在错误时会出现此错误(例如,我们可能同时得到 a>b 和 b>a)。但我找不到任何场景来复制该逻辑错误。
什么情况可能导致此错误?我该如何解决?
非常感谢您的帮助