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 为真和为假时打印。
我需要你的帮助。我有这个方法:
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 为真和为假时打印。