我有一个像这样的比较器:
Collections.sort( sortedPlayers, new Comparator<RoundPlayer>()
{
public int compare(RoundPlayer p1, RoundPlayer p2)
{
return p1.getScore() - p2.getScore();
}
});
已排序的玩家是玩家对象列表,他们返回的分数是200,-300,1000等等。
比较器的目标是对它们进行排序,使它们降序为1000,200,-300。
然而,这个比较器似乎返回了不稳定的结果。通常首先出现负数。
答案 0 :(得分:4)
只需撤消您目前拥有的返回值
<强>样品强>
return p2.getScore() - p1.getScore(); //will sort in descending order
答案 1 :(得分:3)
如果您想按降序排序,请考虑使用Collections.reverseOrder(Comparator cmp)包裹Comparator
。
另请注意,由于整数溢出,减去这两个值是一个坏主意。您的compare
逻辑为p1.getScore() - p2.getScore()
。考虑
p1.score = 2147483647,p2.score = -2147483648,您的比较器将返回-1,错误地指示p1的分数小于 p2的分数。
正确的逻辑是测试&lt;,=和&gt;,返回-1,0和1.更好的是,Integer
已经实现了这个逻辑,所以你可以简单地委托给它compareTo
方法
return Integer.valueOf(p1.getScore()).compareTo(Integer.valueOf(p2.getScore());