J'ai besoin de ton aide. J'ai cette méthode:

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

Le résultat est que rien n'est ajouté au jeu de résultats. Si je saute la condition if, tout est ajouté (jeux de tous les joueurs, pas seulement d'un jeu donné).

Si j'essaye quelque chose comme:

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

Je reçois un pointeur nul lors des tests, même si des jeux sont ajoutés. Je dois donc probablement vérifier la clé de chaque entrée et c'est ce que j'essaie de faire.

1
Mr P 10 févr. 2020 à 01:36

1 réponse

Meilleure réponse

Le problème se situe probablement dans l'instruction if, comme vous l'avez correctement souligné. Il semble que vous n'ayez pas remplacé la méthode .equals() dans la classe Player. Si vous ne voulez pas faire cela, vous pouvez remplacer l'instruction if par quelque chose comme:

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

En supposant que la classe Player possède une méthode getName () renvoyant une chaîne et que vous souhaitez comparer deux instances de Player en fonction de cette égalité de chaîne. Vous pouvez adapter cette condition d'égalité soit à l'intérieur de l'instruction if (comme ci-dessus), soit à l'intérieur de la méthode .equals () du Player (outrepassant la méthode hashCode (), comme l'a commenté Andreas).

Si vous avez remplacé la méthode equals(), mais que cela ne fonctionne toujours pas, essayez de déboguer cette méthode ou imprimez simplement quand elle retourne vrai et quand faux.

3
vefthym 9 févr. 2020 à 22:51