簡體   English   中英

設置為值的 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 類中重寫.equals()方法。 如果您不想這樣做,您可以將 if 語句更改為以下內容:

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

假設 Player 類有一個方法 getName() 返回一個字符串,並且您想根據此字符串相等性比較兩個 Player 實例。 您可以在 if 語句中(如上)或在 Player 的 .equals() 方法中調整此相等條件(也可以覆蓋 hashCode() 方法,正如 Andreas 評論的那樣)。

如果您確實覆蓋了equals()方法,但它仍然不起作用,請嘗試調試此方法或僅在返回 true 和 false 時打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM