簡體   English   中英

一個映射包含Java中的另一個Map

[英]A map contains another Map in Java

我想創建一個包含另一個地圖的Map。如果內部Map中沒有特殊鍵,我想創建value = 1的鍵,否則增加其值。
我寫了這段代碼

Map <String, Map <String,Double>> ingMap= new HashMap<>();
Map <String,Double> k= new HashMap<>();
k.put("Class1", 1.0);
ingMap.put("A", k);
k.put("Class2", 1.0);
ingMap.put("A", k);
k.put("Class1", 1.0);
ingMap.put("B", k);
k.put("Class2", 1.0);
ingMap.put("B", k);
k = ingMap.get("A");
if (k.containsKey("Class3")) {            
    k.put("Class3", k.get(k)+1);
    ingMap.put("A", k );
}
else{                        
    k.put("Class3", 1.0);
    ingMap.put("A",k );                       
 }
 System.out.println("\n" + ingMap); 

結果是:

{A={Class1=1.0, Class2=1.0, Class3=1.0}, B={Class1=1.0, Class2=1.0, **Class3=1.0}**}

但是我真的想要:

{A={Class1=1.0, Class2=1.0, Class3=1.0}, B={Class1=1.0, Class2=1.0}}

您要將相同的內部映射k放在外部映射的所有值中。 您需要為每個外部地圖鍵創建一個新的內部地圖實例:

Map <String,Double> k= new HashMap<>();
k.put("Class1", 1.0);
k.put("Class2", 1.0);
ingMap.put("A", k);

k= new HashMap<>();
k.put("Class1", 1.0);
k.put("Class2", 1.0);
ingMap.put("B", k);

無需將相同的值和相同的鍵兩次放置,因為它什么也不做。

並且用於更新內部地圖的代碼應如下所示:

k = ingMap.get("A");
if (k != null) {
    if (k.containsKey("Class3")) {            
        k.put("Class3", k.get("Class3")+1);
    }
    else {                        
        k.put("Class3", 1.0);                    
    }
}

暫無
暫無

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

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