在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!
閱讀上的所有其他同樣的問題後,所以我的結論是,當有可能是邏輯錯誤(例如,我們可能會得到一個>出現這個錯誤b和b> a)。但是我找不到任何場景來複制那個邏輯錯誤。
什麼情況可能導致此錯誤?我該如何解決它?
非常感謝您的幫助
你確定轉換成'(int)'永遠不會溢出/下溢嗎?你可以嘗試'Double.compare(x,y)'而不是? –
您是否嘗試過記錄比較結果? 「distanceTo」方法的返回類型是什麼? –
看來,在這些情況下,一些不良的值被傳入? – shuangwhywhy