2016-02-24 162 views
1

如果我有一個HashMap<String,Object>有三個條目<String,String>和一個是<String,Integer>是否有方法可以輕鬆地將它「投射」到HashMap<String,String>?現在我和做一個新的HashMap並複製所有的值,以便我可以在複製期間轉換整數。將整數轉換爲字符串中的字符串,對象哈希映射

+0

不清楚您正在嘗試解決的問題。您是否嘗試過使用Map 並將整數作爲字符串放在首位? –

+0

將'Integer'作爲'String'。也可能有助於創建一個函數,它可以識別該字符串是否也是一個整數。 – ifly6

回答

2

應該可以投射它,但在嘗試從地圖中檢索其中一個整數時會出現異常。

我想你問的是投射hashmap的內容,在這種情況下,值,所以他們都出來的字符串,這不會發生。

最好的解決方案是在首先填充地圖時將整數轉換爲字符串。

0

,就可以把原來的地圖,無需複製:

map.put("intKey", map.get("intKey").toString()); 
Map<String, String> fixedMap = (Map) map; 

它看起來像什麼是錯的與您的設計雖然。最好修復將整數推入地圖的代碼,以便您不必在下游處理這個技巧。

0

像這樣的東西應該更容易:

Class<? extends Object> className = obj.getClass(); 

    if (className.getName().contains("String")){ 
    //add the object  
    }else { 
    //convert it to String and then add to HashMap 
    } 
+0

我希望沒有人在那裏放入'NotAString'!如果你採用這種方法,爲什麼不檢查'if(String.class.equals(obj.getClass())'? – yshavit

+0

@yshavit這就是他說他需要將整數轉換爲字符串 –

+0

我的觀點是,只是檢查類名是否包含「String」過於寬泛,除java.lang.String之外還有與之匹配的類。 – yshavit

0

如果您使用的是Java 8中,您可以使用的forEach與BiConsumer。

您可以在代碼看看下面

Map<String, Object> map = new HashMap<>(); 
map.put("a", "a"); 
map.put("b", "b"); 
map.put("1", Integer.valueOf(1)); 

map.forEach((k, v) -> map.put(k, v.toString())); 

map.forEach((k, v) -> map.put(k, v.toString()));地圖中所有值都是字符串之後。這個循環仍然存在,但是你正在使用語言功能/資源。

相關問題