Java比较器的使用

标签 java comparator

我对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/

相关文章:

c++ - 自定义比较器和模板的具体问题

java - 静态和非静态初始化代码块有什么区别

java - 如何解决recyclerview中的重复数据

java - 为什么 SimpleDateFormat HH 与 hh 的工作方式不同

java - Generics、Comparable 和 Comparator...语法错误,插入 ";"来完成 LocalVariableDeclarationStatement”

java - 如何使用 `Collections.binarySearch()` 通过对象的 ArrayList 进行二分搜索?

java - 我什么时候应该实现比较器?

java - 重写抽象方法compare()

java - DeepLearning4j 抛出 "Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll."错误

Java 8 可重复的自定义注解