我对java相当陌生,因此提出了这个问题。我的任务是创建一个 Checker 类,它使用比较器 desc 对玩家进行排序。排序逻辑是按照得分从高到低的顺序对选手进行排序,如果两个选手得分相同,则名字字典序大的排在前面。
这是 Player 类
class Player
{
String name;
int score;
}
比较器以这种方式调用
Checker check=new Checker();
.................
Arrays.sort(Player,check.desc);
这是我尝试过的
class Checker implements Comparator<Player>{
public int compare(Player p1, Player p2){
if(p1.score < p2.score) return 1;
else if(p1.score > p2.score) return -1;
else if(p1.score == p2.score){
if(p1.name.compareTo(p2.name) < 0) return 1;
else if(p1.name.compareTo(p2.name) > 0) return -1;
else if (p1.name.compareTo(p2.name) == 0) return 0;
}
}
}
有人可以帮我解决这个问题吗?我真的不明白 desc
如何成为 checker
类的属性。
最佳答案
如果您被允许在您的解决方案中使用Comparator
,那么它实际上比您想象的要简单得多。
Comparator<Player> playerSorted = Comparator
.comparingInt(Player::getScore)
.thenComparing(Player::getName)
.reversed();
如果您需要将其包装在另一个类中,则可以将此 Comparator
声明为 private static final
并将 compare
方法委托(delegate)给它。
class Checker implements Comparator<Player> {
private static final Comparator<Player> SORT_ASC = Comparator
.comparingInt(Player::getScore).thenComparing(Player::getName);
private static final Comparator<Player> SORT_DESC = SORT_ASC.reversed();
private final boolean descending;
public int compare(Player player1, Player player2) {
Comparator<Player> sorter = descending ? SORT_DESC : SORT_ASC;
return sorter.compare(player1, player2);
}
}
关于Java比较器的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014288/