2014-04-15 175 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))); 
     } 

    } 

}