3 votes

Comment itérer sur une carte créée avec MVEL

J'ai créé une carte dans MVEL et je dois la parcourir en utilisant foreach. Comment faire ?

Une question similaire se pose : Comment itérer sur une carte dans mvel Mais dans ce cas, la carte avait été créée en Java et disposait d'une méthode permettant de renvoyer un tableau de clés (entrySet), ce qui n'est pas mon cas.

//MVEL
map = [
'a': 'a1',
'b': 'b2',
'c': 'c3'
];

foreach (key: map) {
    System.out.println(key);
}

J'ai essayé à la fois map et map.entrySet dans la boucle foreach mais aucun ne semble fonctionner.

Note : Je l'ai testé en utilisant la ligne de commande MVEL et en utilisant la version 2.2.0.15 de MVEL.

2voto

Adrian Shum Points 10784

Bien que vous ayez accepté une réponse, je pense qu'il est préférable d'ajouter quelque chose pour ne pas induire d'autres personnes en erreur :

... avait une méthode pour retourner un tableau de clés (entrySet) ce qui n'est pas mon cas

Tout d'abord, une carte est une carte. Une carte créée avec MVEL est simplement une carte "Java". La façon d'itérer est la même et les méthodes sont les mêmes.

Deuxièmement, entrySet() ne renvoie pas un "tableau de clés". Il renvoie un ensemble d'entrées (comme son nom l'indique).

Je ne vois pas pourquoi vous ne pouvez pas utiliser entrySet car cela fonctionne très bien pour moi. Je soupçonne que vous avez fait foreach (e : map.entrySet) . Cela ne fonctionnera pas, car dans MVEL, la navigation des propriétés peut signifier plusieurs choses, comme les propriétés d'un bean (ce qui signifie qu'il appellera map.getEntrySet() ), ou la recherche d'une carte (ce qui signifie qu'il appellera map.get('entrySet') ), ou de récupérer le champ (ce qui signifie "map.entrySet"). Cependant, toutes ces méthodes ne sont pas valables dans votre cas. Vous voulez simplement invoquer map.entrySet() de sorte qu'il suffit de faire foreach (e : map.entrySet())

La procédure à suivre est la suivante :

map = ['a':'a1', 'b':'b1'] ; 
foreach(entry : map.entrySet()) {
    System.out.println('key ' + entry.key + ' value ' + entry.value)
};

0voto

hj3 Points 1

Vous pouvez utiliser quelque chose comme ceci :

map = [
'a': 'a1',
'b': 'b2',
'c': 'c3'
];

foreach (key : map.keySet()) {
        System.out.println("Key:" + key + " Value:" + map[key]);

}

Il produit :

Key:b Value:b2
Key:c Value:c3
Key:a Value:a1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X