Java comparator按顺序排序一个条目
我正在按一列的值对2D数组进行排序。第一列为国家代码,第二列为该国滑冰运动员的姓名,第三列为该国的分数: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.
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);
}