Java比较器的用法
我相当新的Java,因此这个问题。 我的任务是创建一个类检查器,它使用比较器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
方法委托给它。
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);
}
}
链接地址: http://www.djcxy.com/p/91937.html
下一篇: When to use Comparator and when to use Comparable in Java?