2017-09-16 197 views
0

下面是我的code.Any帮助表示赞赏。 我根本无法读取列表并创建地图。 我将一个List<Map<String, Object>>作为 函数参数传递给Rest层。在Rest代理中调用它的一个 纯List。在我的服务层,我需要使用存储在List中的Map值。从List <Map <String,Object >>创建HashMap <String,Map>给出java.lang.ClassCastException

列表有值提到

[{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}} 

下面的代码工作REST调用在控制器层即提出过,但在服务无法正常工作休息后通话。

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 
        } 
       } 

试图在计算器上

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)以下异常或试图用户迭代器或地图的所有其他选项。条目。

java.lang.ClassCastException:java.lang.String中不能转换为java.util.Map

+0

欢迎来到Stack Overflow!请[参观](http://stackoverflow.com/tour)以查看网站的工作原理和问题,并相应地编辑您的问题。另请参见:[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve) –

+0

您有两张地图吗? –

+0

是的一个是Empty Map userRoleMap 其中我想填充List中的值> – Sagarmatha

回答

1

您在这里输入的代码了很多,当你可能只是这样做

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

在for(Map m:allRolesDetails){java.lang.ClassCastException :java.lang.String中不能转换为java.util.Map \t在com.apple.sfo.workflow.service.InventoryServiceImpl.fetchCenterForDetails(InventoryServiceImpl.java:4649) \t在sun.reflect.NativeMethodAccessorImpl.invoke0(母语方法) \t at sun.reflect.NativeMethodAccessorImpl。invoke(NativeMethodAccessorImpl.java:62) – Sagarmatha

+0

当我找出使用上面几行代码而不是我使用的很多代码的问题后,感谢输入。 – Sagarmatha

0

我找到了解决方案。 正如我所提到

下面的代码工作休息调用时即之前控制器层,但 不休息通话后在服务层工作。

有与我经过在RestProxy呼叫 我经过@QueryParam(value = "allRolesDetails") List allRolesDetails代替final List<Map<String, Object>> allRolesDetails。经过这种变化适当地图参数的类型的问题,而迭代名单是越来越检索。 这篇文章帮我找到了我的问题。 sending List/Map as POST parameter jersey

相关问题