从List&lt;创建HashMap <string,map>地图<串,对象>&GT;给出了java.lang.ClassCastException

时间:2017-09-16 18:44:02

标签: java list hashmap iteration classcastexception

以下是我的代码。非常感谢。 我根本无法读取列表并创建地图。 我正在通过List<Map<String, Object>>作为 函数参数直到Rest层。在Rest Proxy中调用它的a 普通清单。在我的服务层中,我需要使用存储在List中的Map值。

我的列表具有上述值

[{ID=56, VALUE=CPR,DESCRIPTOR=HEAD}, 
{ID=68,VALUE=RegFinance,DESCRIPTOR=FINANCE}]

我想要以下格式创建Map<String,Map> using List<Map<String, Object>>

{56={ID=56, VALUE=CPR,DESCRIPTOR=HEAD}, 
68={ID=68,VALUE=RegFinance,DESCRIPTOR=FINANCE}}

下面的代码在休息调用之前工作,即在Controller层中,但在休息调用后在Service层中不起作用。

    Map<String, Object> userRoleMap = new HashMap<>();
                for (int count = 0; count < allRolesDetails.size(); count++) {
                    //Map<String, Object> mapp=allRolesDetails.get(count);
                   //Above line Gives Exception

                    String[] singleColumn = allRolesDetails.get(count).toString().split(",");
                   //Above line Gives Exception

                    for(String pair : singleColumn)  
                    {
                        String[] entry = pair.split("=");   
                        userRoleMap.put(entry[1].trim(),allRolesDetails.get(count)); 
                        break;//add them to the hashmap and trim whitespaces
                    }
                }

尝试了StackoverFlow上的所有其他选项

Iterator<Map<String, Object>> it = allRolesDetails.iterator();
            while (it.hasNext()) {
                Map<String, Object> map = it.next(); //so here you don't need a potentially unsafe cast
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    System.out.println(entry.getKey() + " = " + entry.getValue());
                }
            }

for(Map<String, Object> map:allRolesDetails){
                for(Map.Entry<String, Object>entry : map.entrySet()){
                    String Key=entry.getKey();
                    Object Value=entry.getValue();
                }
            }

在所有情况下,每当我使用allRolesDetails.get(count)或尝试使用Iterator或Map.Entry时,我都会收到以下异常。

java.lang.ClassCastException:java.lang.String无法强制转换为java.util.Map

2 个答案:

答案 0 :(得分:1)

你在这里输入了很多代码,当你可以这样做时

Map<String, Map<String, Object>> userRoleMap = new HashMap<>();
for (Map<String, Object> m : allRolesDetails) {
    userRoleMap.put(m.get("ID"), m);
}

答案 1 :(得分:0)

我找到了解决方案。 正如我提到的那样

  

下面的代码在休息调用之前工作,即在Controller层中   在休息呼叫后在服务层中不起作用。

我在RestProxy Call中传递的参数类型存在问题 我正在传递@QueryParam(value = "allRolesDetails") List allRolesDetails而不是final List<Map<String, Object>> allRolesDetails。在此更改之后,正在迭代List时检索到正确的Map。 这篇文章帮我找到了问题所在。 sending List/Map as POST parameter jersey