我需要你的帮助。我有这种方法:
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类中重写.equals()
方法。如果您不想这样做,可以将if语句更改为:
if (entry.getKey().getName().equals(player.getName())) {
假设Player类具有返回字符串的String getName()方法,并且您要基于此字符串相等性比较两个Player实例。您可以在if语句内部(如上所述)或Player的.equals()方法内部(也可以覆盖hashCode()方法,如Andreas所评论的那样)适应这种相等条件。
如果您确实重写了equals()
方法,但是仍然无法使用,请尝试调试此方法,或者仅在返回true和false时进行打印。