Java比较器按顺序排序一个条目

sam*_*sam 4 java arrays sorting

我按一列的值对2D数组进行排序.第一列包含国家/地区代码,第二列包含该国家/地区的滑冰者名称,第三列包含该国家/地区的分数:

skateArray[1][0] = "JPN";
skateArray[1][1] += "Yuzuru HANYU";
skateArray[1][2] = "13";

skateArray[2][0] = "USA";
skateArray[2][1] = "Jeremy ABBOTT "
skateArray[2][2] = "17";
Run Code Online (Sandbox Code Playgroud)

我有这样的工作:

     Arrays.sort(skateArray, new Comparator<String[]>() {

            public int compare(final String[] entry1, final String[] entry2)
            {

                final String firstScore = entry1[2];
                final String secondScore = entry2[2];
                return secondScore.compareTo(firstScore);


            }
        });

        for (final String[] string : skateArray) {
            System.out.println(string[0] + " " + string[1] + " " + string[2]);
        }
Run Code Online (Sandbox Code Playgroud)

一切都有效,除了输出中的这个怪癖:

GBR   8.0
RUS  37.0
CAN  32.0
USA   27.0
JPN   24.0
ITA   23.0
CHN  20.0
FRA  20.0
GER  17.0
UKR   10.0
Run Code Online (Sandbox Code Playgroud)

如您所见,首先显示得分最低的国家(GBR,8.0).其余的按照我想要的降序显示.我无法弄清楚为什么.

Jos*_*vis 6

这是因为您将分数作为字符串进行比较,因此它们按字母顺序排序.

尝试用以下代码替换函数的最后一行:

return new Double(secondScore).compareTo(new Double(score1));
Run Code Online (Sandbox Code Playgroud)