2016-02-24 122 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()));地图中所有值都是字符串之后。这个循环仍然存在,但是你正在使用语言功能/资源。

相关问题