Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中排序整数首先返回负数?_Java_Sorting - Fatal编程技术网

在java中排序整数首先返回负数?

在java中排序整数首先返回负数?,java,sorting,Java,Sorting,我有一个这样的比较器: Collections.sort( sortedPlayers, new Comparator<RoundPlayer>() { public int compare(RoundPlayer p1, RoundPlayer p2) { return p1.getScore() - p2.getScore(); } }); Collections.sort(sortedPlayers,新比较器() { 公共整数比较(Ro

我有一个这样的比较器:

Collections.sort( sortedPlayers, new Comparator<RoundPlayer>()
{
    public int compare(RoundPlayer p1, RoundPlayer p2)
    {
        return p1.getScore() - p2.getScore();
    }
});
Collections.sort(sortedPlayers,新比较器()
{
公共整数比较(RoundPlayer p1、RoundPlayer p2)
{
返回p1.getScore()-p2.getScore();
}
});
排序玩家是玩家对象的列表,他们返回的分数是整数,例如,200、-300、1000等

比较器的目标是对它们进行排序,使其降序为1000、200、-300


然而,这个比较器似乎返回了不稳定的结果。通常先出现负数。

只需反转当前的返回值即可

样本

return p2.getScore() - p1.getScore(); //will sort in descending order

如果您想按降序排序,请考虑使用

包装<代码>比较器< /代码>。 还要注意,由于整数溢出,将这两个值相减是一个坏主意。您的
比较
逻辑是
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());

它是不稳定的还是按升序排列的?它看起来不稳定,但是它的设置方式,我只能用少数玩家的分数来测试它。在自然顺序中,负数总是排在正数之前。我几乎想知道它是不是按数量级排序,而不是按顺序排序。。。。您能提供一个输入示例和相应的输出吗?
getScore()
的返回类型是什么?我在谷歌上搜索了“android排序负数对象列表”,她告诉我第一个结果是你的精彩解释。这似乎是一个罕见的问题,但我试图根据MediaStore文件的Bucket ID对其进行排序,由于出现错误,我注意到Bucket ID的负值可能是问题的根源。你的信息对我帮助很大。