我对java这个问题很新。我的任务是创建一个类Checker,它使用比较器desc对玩家进行排序。排序逻辑是按分数递减顺序对玩家进行排序,然后如果两个玩家具有相同的分数,那么名字按字典顺序放大的玩家应首先出现。
这是播放器类
class Player
{
String name;
int score;
}
Comparator以这种方式调用
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
类的属性。
答案 0 :(得分:1)
如果您允许在解决方案中使用Comparator
,那么它实际上比您想象的要简单得多。
Comparator<Player> playerSorted = Comparator
.comparingInt(Player::getScore)
.thenComparing(Player::getName)
.reversed();
如果您需要将其包装在另一个类中,则可以将此Comparator
声明为private static final
并将compare
方法委托给它。
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);
}
}