[英]Sorting ints in java returns negative numbers first?
我有一個類似的比較器:
Collections.sort( sortedPlayers, new Comparator<RoundPlayer>()
{
public int compare(RoundPlayer p1, RoundPlayer p2)
{
return p1.getScore() - p2.getScore();
}
});
排序的玩家是玩家對象的列表,它們返回的分數是整數,例如200,-300、1000等。
比較器的目標是對它們進行排序,使它們以降序排列,即1000、200,-300。
但是,此比較器似乎返回了不穩定的結果。 通常會先出現負數。
只需反轉您當前的退貨價值
樣品
return p2.getScore() - p1.getScore(); //will sort in descending order
如果要按降序排序,請考慮使用Collections.reverseOrder(Comparator cmp)包裝Comparator
器。
另請注意,由於整數溢出,將兩個值相減是個壞主意。 您的compare
邏輯是p1.getScore() - p2.getScore()
。 考慮p1.score = 2147483647,p2.score = -2147483648,您的比較器將返回-1,錯誤地表明p1的分數小於 p2的分數。
正確的邏輯是測試<,=和>,返回-1、0和1。更好的是, Integer
已經實現了此邏輯,因此您可以簡單地委派給它的compareTo
方法。
return Integer.valueOf(p1.getScore()).compareTo(Integer.valueOf(p2.getScore());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.