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

上一篇: Java Comparator usage

下一篇: When to use Comparator and when to use Comparable in Java?