2014-04-15 233 views
-1

我從HashMap中獲得價值方法從哈希映射

Map<String, Object> mapObj = new HashMap<String, Object>(); 
String[] strArray = {"String1", "String2"}; 
mapObj.put("string_array",strArray); 

//trying to print: 
for (String entry : mapObj.keySet()) { 
    Log.v("", "map entry "+ entry); 
    Log.v("", "map value "+ mapObj.get(entry)); 
} 

實際輸出面臨的問題檢索值:[Ljava.lang.String; @ 410ee550

預期:String1中String2的

+0

謝謝。我得到了答案 – androidraj

回答

0

你正在獲取一個數組Object。您應該遍歷該對象以獲取元素。

for (String entry : mapObj.keySet()) { 
     String[] arr = (String[]) mapObj.get(entry); 
     for (String string : arr) { 
      System.out.println(string); 
     } 
    }} 
+0

謝謝。我得到答案 – androidraj

0

你需要typecaste這裏

for (String entry : mapObj.keySet()) { 
    Log.v("", "map entry "+ entry); 
    Log.v("", "map value "+ mapObj.get(entry)); 
    String[] strArray = (String[])mapObj.get(entry); 

//now iterate strArray 
} 
2

數組類型不重寫Object#toString,所以你看到的是超一流的表現

的getClass()。的getName()+「@ '+ Integer.toHexString(hashCode())

數組對象i自行宣佈。你可以做

System.out.println("map value "+ Arrays.toString((String[])mapObj.get(entry))); 

注:最好使用Map<String, String[]>代替原始集合類型,以避免鑄造。

+0

謝謝你@reimeus – androidraj

+0

yw,不要忘記[接受一個答案](http://meta.stackexchange.com/a/65088/155831):) – Reimeus

0

由於您在地圖中添加了String[],因此您將在地圖上顯示String[]。 因此您需要轉換檢索到的對象。 (String[])mapObj.get(entry);

您的實際輸出清楚地表明Map返回了String[]。見this[Ljava.lang.String;

解釋因爲字符串[]不會覆蓋的toString(),因此你需要每個元素陣列像抓取:

String[] arr = (String[])mapObj.get(entry); 
for(String eachString: arr){ 
    System.out.print(eachString); 
} 
+0

不會改變輸出,因爲數組不會改變'重寫'Object#toString()'。 – JonK

0

爲簡單起見,你可以使用Arrays.toString方法

public class MapValue { 

    public static void main(String[] args) { 
     Map<String, Object> mapObj = new HashMap<String, Object>(); 
     String[] strArray = {"String1", "String2"}; 
     mapObj.put("string_array",strArray); 

     //trying to print: 
     for (String entry : mapObj.keySet()) { 
      Log.v("", "map entry "+ entry); 
      Log.v("", "map value "+ Arrays.toString((Object[]) mapObj.get(entry))); 
     } 

    } 

}