Java Comparator用法

时间:2016-03-15 14:35:26

标签: java comparator

我对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类的属性。

1 个答案:

答案 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);
    }
}