gpt4 book ai didi

java - 在 Java 中使用比较器对列表进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:22 25 4
gpt4 key购买 nike

我有两个类(class)

public class PopularSports {    
public int Rank;
public String Sport;
}

public class Medals {
public String Sport
public String Medal
public int Year
public String Game
public String Athlete
}

当我尝试引导他们的 csv 并在每个类的列表中获得结果时,我想按以下顺序对它们进行排序。

PopularSports 类应按以下顺序排序:

  1. 排名
  2. 运动

Medals 类应按以下顺序排序:

  1. 运动
  2. 奖章
  3. 年份
  4. 游戏
  5. 运动员

我已经创建了这样的压缩器

Collections.sort(medalReportList, new Comparator<Medals >() {
@Override
public int compare(Medals o1, Medals o2) {
return getRankOfSportBySportName(o1.getSport()) > getRankOfSportBySportName(o2.getSport())
? +1
: getRankOfSportBySportName(o1.getSport()) < getRankOfSportBySportName(o2.getSport())
? -1
: o1.getAthlete().compareToIgnoreCase(o2.getAthlete());
}
});

但这并没有实现,它根据运动员姓名进行排序。

最佳答案

您需要嵌套这些检查。我将编写 PopularSports 方法并将其他方法留给您。

我建议您了解 Java 编码标准,并使这些类名称成为单数:PopularSportMedal。我将在下面演示:

public int compareTo(PopularSport other) {
if (this.rank < other.rank) return -1;
else if (this.rank > other.rank) return +1;
else {
// This is where the nesting happens to break the ties.
if (this.sport.compareTo(other.sport) < 0) return -1;
else if (this.sport.compareTo(other.sport) > 0) return +1;
else return 0; // You'll have deeper nesting for the other values in Medal.
}
}

您选择的顺序决定了先检查哪些。您嵌套在 else 子句中以打破联系。

关于java - 在 Java 中使用比较器对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19708533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com