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

问题描述 投票:1回答:1

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

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));

即使添加了游戏,我在测试时也会得到空指针。因此,我可能必须检查每个条目的键,这就是我要尝试的操作。

java dictionary hashmap set key-value
1个回答
2
投票

问题可能出在您正确指出的if语句中。似乎您没有在Player类中重写.equals()方法。如果您不想这样做,可以将if语句更改为:

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

假设Player类具有返回字符串的String getName()方法,并且您要基于此字符串相等性比较两个Player实例。您可以在if语句内部(如上所述)或Player的.equals()方法内部(也可以覆盖hashCode()方法,如Andreas所评论的那样)适应这种相等条件。

如果您确实重写了equals()方法,但是仍然无法使用,请尝试调试此方法,或者仅在返回true和false时进行打印。

© www.soinside.com 2019 - 2024. All rights reserved.