2016-06-07 28 views
1

我需要將對(字符串,對象)保存到散列表中。基本上我設法填充hashmap,但我不知道如何訪問存儲在內存中的值。 這是我的代碼:從hashmaps讀取對象內容

HashMap<String, speedDial> SDs = new HashMap<String, speedDial>(); 
speedDial sd = new speedDial(); 
SDs.put(String.valueOf(temp),sd); whre temp is my index and sd my object 

然後我填的數據插入SD從XML文件中讀取它們。

當調試與eclypse我可以看到值正確存儲到內存中的項目,但我不知道如何以檢索相關對象的字符串值,請參閱SD對象格式如下

class speedDial{ 
    String label, dirN; 


    speedDial (String l, String dN) { 
    this.label = l; 
    this.dirN = dN; 
    } 
} 

請參見下圖:它突出顯示了我試圖訪問的數據! enter image description here

當我嘗試訪問HashMap和打印出來的價值,我只拿到了最後一個,我用的是以下幾點:

for (int k = 0; k <50; k++) { 
     speedDial.printSD(SDs.get(String.valueOf(k))); 
} 

這是我從快速撥號類採取printSD方法:

public static void printSD (speedDial SD) { 
     System.out.println("Dir.N: " + SD.dirN + " Label: " + SD.label); 

    } 

這是所有50次迭代的輸出,這是我在另一個循環中從哈希映射中讀取xml文件時添加到哈希映射中的最後一個元素。

Dir.N:123450標籤:label5

+0

參見[這裏](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#get %28java.lang.Object%29)... – Mena

+0

https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html – ChadNC

回答

1

考慮一個HashMap如:

SpeedDial speedDial1 = new SpeedDial("test1", "test2"); 
SpeedDial speedDial2 = new SpeedDial("test3", "test4"); 
SpeedDial speedDial3 = new SpeedDial("test5", "test6"); 

HashMap<String, SpeedDial> exampleHashMap = new HashMap<>(3); 
exampleHashMap.put("key1", speedDial1); 
exampleHashMap.put("key2", speedDial2); 
exampleHashMap.put("key3", speedDial3); 

您可以檢索該值對於給定的關鍵,像這樣:

SpeedDial exampleOfGetValue = exampleHashMap.get("key1"); 
System.out.println(exampleOfGetValue.label); 
System.out.println(exampleOfGetValue.dirN); 

此輸出:

test1 
test2 

如果你想檢索給定值然後你可以使用類似於:

public final <S, T> List<S> getKeysForValue(final HashMap<S, T> hashMap, final T value) { 
    return hashMap.entrySet() 
        .stream() 
        .filter(entry -> entry.getValue().equals(value)) 
        .map(Map.Entry::getKey) 
        .collect(Collectors.toList()); 
} 

如果調用此函數像這樣:

List<String> exampleOfGetKeys = getKeysForValue(exampleHashMap, speedDial1); 
System.out.println(exampleOfGetKeys); 

它將輸出具有此值的所有鍵的列表:

[key1] 
+0

問題是當值是一個對象不是一個整數... – lorenz

+0

@ lorenz以及我的答案適用於對象..... – explv

+0

爲HashMap SD我添加在每個領域,即SDs.dirN和SDs.label一個值,所以我的哈希映射將在'n'鍵的對象與上述對值。問題是如何訪問這個對象的值,因爲如果我做得到的迴應是:[email protected] – lorenz

0

下面的代碼將通過地圖迭代,並存儲在兩個列表鍵和值。

List<String> keys = new ArrayList(); 
List<Object> values = new ArrayList(); 

for (Map.Entry<String, Object> speedDial: SDs.entrySet()) { 
      Object speedDialValue = speedDial.getValue(); 
      String key= speedDial.getKey(); 
      keys.add(key); 
      values.add(speedDialValue); 
} 

要檢索的字符串值,通常被用來作爲干將,建議使用private修改您的類屬性。

public class speedDial{ 

    private String label, dirN; 


    public speedDial (String l, String dN) { 
    this.label = l; 
    this.dirN = dN; 
    } 

    public String getLabel(){ 
    return this.label; 
    } 

    public String getDirN(){ 
    return this.dirN; 
    } 
} 

的,你可以簡單地使用yourObject.getLabel();yourObject.getDirN();

希望幫助!

0

SDs.keySet()給你設置的鍵您的HashMap 您可以使用數值列表

for (String mapKey : SDs.keySet()) { 
    System.out.println("key: "+mapKey+" value: "+ SDs.get(mapKey).toString()); 
} 

你要跟必須寫一個toString()fonction您快速撥號