Java 设置为值的地图。如何获取给定键的所有值?

Java Map with Set as Value. How to get all values for a given key?

我需要你的帮助。我有这个方法:

Set<Games> getGames(Player player) {
    Map<User, Set<Games>> map = repository.getGamesMap();
    Set<Games> result = new HashSet<>();
    for (Map.Entry<Player, Set<Games>> entry : map.entrySet()) {
        if (entry.getKey().equals(player)) {
            Set<Games> games = entry.getValue();
            result.addAll(games);
        }
    }
    return result;
}

结果是结果集中没有添加任何内容。如果我跳过 if 条件,则会添加所有内容(所有玩家的游戏,而不仅仅是给定玩家的游戏)。

如果我尝试这样的事情:

return newHashSet(repository.getGamesMap().get(user));

我在测试时得到空指针,即使添加了游戏。所以我可能必须检查每个条目的密钥,这就是我想要做的。

正如您正确指出的那样,问题可能出在 if 语句中。 看来您还没有覆盖 Player class 中的 .equals() 方法。 如果您不想这样做,可以将 if 语句更改为类似以下内容:

if (entry.getKey().getName().equals(player.getName())) {

假设 Player class 有一个返回 String 的方法 getName() 并且您想根据这个字符串相等性比较两个 Player 实例。 您可以在 if 语句(如上所述)或 Player 的 .equals() 方法(也覆盖 hashCode() 方法,正如 Andreas 评论的那样)中调整此相等条件。

如果您确实覆盖了 equals() 方法,但它仍然不起作用,请尝试调试此方法或仅在 returns 为真和为假时打印。