簡體   English   中英

Java-如何將新值添加到哈希映射中的現有鍵。 1個鍵,多個值

[英]Java - How do I add a new value to an existing key in a Hash Map. 1 key, multiple values

我正在嘗試創建一種方法,當給定鍵和值時,該方法可以通過鍵訪問地圖,然后添加或替換該特定值。 我的哈希圖的創建方式如下:

public Band(){
    musicians = new HashMap<>();
}

我可以像這樣添加新條目,以band為鍵:

public void addMapEntry(String band, String name, String instrument, int experience){
    musicians.put(band, new Musician(name, instrument, experience));
}

我的新方法標題如下所示:

public void addValue(){ }

我嘗試使用put方法,但是我無法按照自己的意願使它工作。 我也嘗試遍歷地圖,但是我只使用過該方法來返回列表中的地圖對象,而我不想在此方法中返回任何內容。 我希望能夠向其發送兩個參數(鍵和值),並使其僅替換該特定值。

我希望我的解釋很清楚。

Java Map是每個鍵的單個值。

如果單個鍵需要多個值,則應將類型設為適當類型的集合,並添加自己的邏輯以添加新值。 您的Band類應該具有添加/刪除Musician並處理私有實現中的詳細信息的方法。

public class Band {

   private Map<String, List<Musician>> members = new HashMap<String, List<Musician>>();

   public void addMusician(String key, Musician musician) {
       if (this.members.containsKey(key) {
           List<Musician> musicians = this.members.get(key);
           if (musician != null) {
               musicians.add(musician);
               this.members.put(key, musicians);
           }
       }
   }

   public void removeMusician(String key, Musician musician) {
       // should be clear enough from the add method.
   }
}

我認為最適合您的是使用Guava Multimap

 ListMultimap<String, String> musicianMap = ArrayListMultimap.create();

然后將盡可能多的音樂家添加到您的樂隊中

musicianMap.put("Beatles", new Musician("Jhon Lennon"));
musicianMap.put("Beatles", new Musician("Paul McCartney"));
musicianMap.put("Beatles", new Musician("Ringo Starr"));
musicianMap.put("Beatles", new Musician("George Harrison"));

您可以僅使用鍵將它們全部拉出。

musicianMap.get("Beatles")

這將返回["John Lenon", "Paul McCartney", "Ringo Starr"] ,當然這些將是音樂家類的對象。

暫無
暫無

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

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