Java comparator按顺序排序一个条目

Java comparator按顺序排序一个条目,java,arrays,sorting,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"; 我让它这样工作: Arrays.

我正在按一列的值对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";
我让它这样工作:

     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]);
        }

如您所见,得分最低的国家(GBR,8.0)将首先显示。其余的按我想要的降序显示。我不明白为什么

您正在将每个分数项解析为字符串。从这个意义上说,
8
(字符)总是在
1
(字符)之后,因此结果应该不会令人惊讶


我强烈建议将分数解析为浮点或整数,并以这种方式进行比较。然后你应该得到你想要的结果。

这是因为你将分数作为字符串进行比较,所以它们按字母顺序排序

尝试用以下内容替换函数的最后一行:

return new Double(secondScore).compareTo(new Double(score1));

正如其他人所说,这是因为您将分数存储为
字符串而不是数字类型

考虑使用面向对象编程,并创建一个
Skater
类。这将允许您将Skater的每个成员(变量)存储在其适当的数据类型中。在这种情况下,分数应表示为
double
int
,排序功能将正常工作

class Skater {
    String country;
    String name;
    double score;
    public Skater(String country, String name, double score){
        this.country = country;
        this.name = name;
        this.score = score;
    }

    @Override public String toString() { return country + " " + name + " " + score; }
}
然后,要执行此操作:

Skater[] skaters = {
    new Skater("JPN", "Yuzuru HANYU", 13), 
    new Skater("USA", "Jeremy ABBOTT", 17)
}

Arrays.sort(skaters, new Comparator<Skater>(){
    @Override int compare(Skater s1, Skater s2){
        return Double.compare(s1.score, s2.score);
    }
}

for(Skater skater : skaters) {
    System.out.println(skater);
}
Skater[]skaters={
新滑板手(“JPN”,“Yuzuru HANYU”,13岁),
新滑板手(“美国”,“杰里米·艾伯特”,17岁)
}
sort(skaters,新的Comparator(){
@覆盖int比较(滑冰者s1,滑冰者s2){
返回双倍。比较(s1.得分,s2.得分);
}
}
用于(溜冰者溜冰者:溜冰者){
系统输出打印LN(skater);
}

您试图对数字进行排序,但是您的值表示为字符串。哪一个更大,“10”或“2”?考虑创建具有类型化属性的POJO,而不是使用字符串数组,这应该被解释为非字符串。使用PARSEVALUE或ValueOf来减少创建的对象的数量。
Skater[] skaters = {
    new Skater("JPN", "Yuzuru HANYU", 13), 
    new Skater("USA", "Jeremy ABBOTT", 17)
}

Arrays.sort(skaters, new Comparator<Skater>(){
    @Override int compare(Skater s1, Skater s2){
        return Double.compare(s1.score, s2.score);
    }
}

for(Skater skater : skaters) {
    System.out.println(skater);
}