2017-09-16 5 views
0

Voici mon code. Toute aide est appréciée. Je ne suis tout simplement pas capable de lire la liste et de créer une carte. Je passe un List<Map<String, Object>> comme un paramètre de fonction jusqu'à ce que le calque Rest.In Rest Proxy appelle sa liste simple. Dans ma couche de service, j'ai besoin d'utiliser les valeurs Map stockées dans la liste.Créer HashMap <String,Map> à partir de la liste <Map <String, Object >> donne java.lang.ClassCastException

Ma liste a des valeurs comme indiqué

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

Je veux un créer Map<String,Map> using List<Map<String, Object>> au-dessous le format

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

Ci-dessous le code approprié avant l'appel de repos est fait par exemple dans la couche contrôleur mais ne fonctionne pas en service couche après repos appel.

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

Essayé toutes les autres options sur 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()); 
       } 
      } 

Et

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

Dans tous les cas, je reçois le ci-dessous exception chaque fois que je me sers allRolesDetails.get(count) ou que vous essayez à l'utilisateur Iterator ou Carte .Entrée.

java.lang.ClassCastException: java.lang.String ne peut pas être jeté à java.util.Map

+0

Bienvenue dans Stack Overflow! S'il vous plaît [faites le tour] (http://stackoverflow.com/tour) pour voir comment le site fonctionne et quelles questions sont sur le sujet ici, et éditez votre question en conséquence. Voir aussi: [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) –

+0

Vous avez deux cartes? –

+0

Oui un est vide Carte userRoleMap dans lequel je veux remplir les valeurs de la liste > – Sagarmatha

Répondre

1

Vous tapez beaucoup de code ici, quand vous pouvez simplement faire

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

Toujours me donne l'exception ci-dessous à pour (Map m: allRolesDetails) {java.lang.ClassCastException : java.lang.String ne peut pas être jeté à java.util.Map \t à com.apple.sfo.workflow.service.InventoryServiceImpl.fetchCenterForDetails (InventoryServiceImpl.java:4649) \t à sun.reflect.NativeMethodAccessorImpl.invoke0 (natif Méthode) \t à sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) – Sagarmatha

+0

Après avoir compris le problème utilisé ci-dessus quelques lignes de code au lieu d'un lot de code que j'utilisais. Merci pour les entrées. – Sagarmatha

0

J'ai découvert la solution. Comme je l'ai mentionné

Ci-dessous le code fonctionne avant l'appel reste est fait i.e. dans la couche contrôleur, mais ne fonctionne pas dans la couche de service après appel de repos.

Il y avait un problème avec le type de paramètre que je passe dans RestProxy Appel Je repassais @QueryParam(value = "allRolesDetails") List allRolesDetails au lieu de final List<Map<String, Object>> allRolesDetails .Après ce changement a été une bonne carte se récupérer tout itérer Liste. Ce message m'a aidé à trouver mon problème. sending List/Map as POST parameter jersey