Java比较器的使用
我对java是相当陌生的,所以这个问题。我的任务是创建一个类检查器,它使用比较器desc对玩家进行排序。排序逻辑是按分数按降序对玩家进行排序,如果两个玩家的分数相同,则应首先出现名字按字典顺序较大的玩家 这是玩家级Java比较器的使用,java,comparator,Java,Comparator,我对java是相当陌生的,所以这个问题。我的任务是创建一个类检查器,它使用比较器desc对玩家进行排序。排序逻辑是按分数按降序对玩家进行排序,如果两个玩家的分数相同,则应首先出现名字按字典顺序较大的玩家 这是玩家级 class Player { String name; int score; } 比较器是这样调用的 Checker check=new Checker(); ................. Arrays.sort(Player,check.desc); 这
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;
}
}
}
类检查器实现比较器{
公共整数比较(播放器p1、播放器p2){
如果(p1.scorep2.score)返回-1;
否则如果(p1.score==p2.score){
if(p1.name.compareTo(p2.name)<0)返回1;
else if(p1.name.compareTo(p2.name)>0)返回-1;
else if(p1.name.compareTo(p2.name)==0)返回0;
}
}
}
有人能帮我把它弄好吗。我真的不明白
desc
如何成为checker
类的属性。如果允许您在解决方案中使用比较器,那么它实际上比您想象的要简单得多
Comparator<Player> playerSorted = Comparator
.comparingInt(Player::getScore)
.thenComparing(Player::getName)
.reversed();
“我真的不明白desc如何成为checker类的属性。”如果不添加它,它就不是了。但是,如果您总是想按特定顺序(升序或降序)进行排序,则无需添加任何内容-只需使逻辑返回该固定顺序的正确值即可。我将比较器命名为desc,然后将其删除,因为我无法理解它。不要通过类播放器,而是传递包含players的列表这很优雅,但我受到如何在代码中实现它的限制。我需要实现一个comparator类。@Zeus我已经添加了一条注释,说明如何在您自己的类中使用它。我发现Player::score语法的编译错误。我不知道这是什么意思<代码>错误:“)”应为。比较(玩家::分数)。然后比较(玩家::名称);^Solution.java:6:错误:类型的非法开始。comparingit(Player::score)。然后比较(Player::name);^java:6:错误:';'应为。比较(玩家::分数)。然后比较(玩家::名称)代码>@Zeus答案使用Java 8中引入的功能。看起来您使用的是早期版本的Java。
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);
}
}