java - 按最高分对 map 进行排序

标签 java

我有一张 map ,其中存储了玩家姓名和我更新的分数,一切都很好。

public static Map<String, Integer> map = new HashMap<String, Integer>();

第一轮游戏结束后,我想从 map 上删除最低分数。例如, map 上可能有 8 名玩家,其中 4 人得分为 10,其他 4 人得分为 0,我如何根据得分最高的玩家将 map 分成两半并删除排名最后的 4 名玩家?请记住,8 名玩家没有定义,它可以是任何数字

最佳答案

似乎没有人意识到这不是一个映射。如果您查看高分,就会发现名称可能重复。你想要的是一个 NavigableSet ,其中

class HighScore implements Comparable<HighScore> {
    private static final AtomicLong NEXT_ID = new AtomicLong(1);

    protected final String name;
    protected final long id = NEXT_ID.getAndIncrement();
    protected final int score;

    // ...

    public int compareTo(HighScore o) {
        int diff = score - o.score;
        if (diff != 0) { return diff; }

        long idDiff = id - o.id;
        if (idDiff < 0) { return -1; }
        else if (idDiff > 0) { return 1; }
        else { return 0; }
    }
}

然后您只需pollFirst()即可删除。

关于java - 按最高分对 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392592/

相关文章:

java - 无法解析方法 setVisibility(int)

java - 获取类的所有实例

java - 如何识别哪个类正在调用特定方法?

Java - 使用带有接口(interface)的哈希表作为值

java - 许多在耶拿的 TDB 或 SDB 上命名为 Model

java - 使用 spring mvc 将 url 模式重定向到特定 Controller

java - 当我将策略设置为 HORIZONTAL_SCROLLBAR_​​AS_NEEDED 时,为什么看不到水平滚动条

java - 确保对象始终是列表的成员?

java - Java 中的 Ascii 表

java - RxJava 作为使用 Stream API 并行计算大阶乘的替代品