Java Карта с установленным значением. Как получить все значения для данного ключа? - PullRequest
1 голос
/ 10 февраля 2020

Мне нужна твоя помощь. У меня есть этот метод:

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

При тестировании я получу нулевой указатель, даже если игры добавлены. Поэтому мне, вероятно, придется проверять ключ для каждой записи, и это то, что я пытаюсь сделать.

1 Ответ

3 голосов
/ 10 февраля 2020

Проблема, вероятно, в выражении if, как вы правильно указали. Похоже, вы не переопределили метод .equals() внутри класса Player. Если вы не хотите этого делать, вы можете изменить оператор if на что-то вроде:

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

, предполагая, что у класса Player есть метод getName (), возвращающий String, и вы хотите сравнить два Экземпляры игроков основаны на равенстве строк. Вы можете адаптировать это условие равенства либо внутри оператора if (как указано выше), либо внутри метода .equals () Player (также переопределяя метод hashCode (), как прокомментировал Андреас).

Если вы переопределили метод equals(), но он по-прежнему не работает, попробуйте отладить этот метод или просто напечатать, когда он возвращает true и когда false.

...