如何迭代在MVEL中创建的地图

时间:2013-06-27 02:57:39

标签: mvel

我在MVEL中创建了一个地图,我必须使用foreach迭代它。我该怎么做?

有一个类似的问题: How to iterate over a map in mvel 但是在这种情况下,地图是用Java创建的,并且有一个返回键数组的方法(entrySet),而不是我的情况。

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

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

我在foreach循环中尝试了map和map.entrySet,但似乎都没有。

注意:我使用MVEL命令行并使用MVEL版本2.2.0.15进行测试

2 个答案:

答案 0 :(得分:1)

虽然您已经接受了答案,但我认为最好添加一些内容,以免误导其他人:

  

...有一个返回键数组的方法(entrySet),而不是我的情况

首先,Map是Map。在MVEL中创建的地图只是一个“Java”地图。迭代的方式是相同的,他们提供相同的方法

其次,entrySet()没有返回“数组键”。它返回一组条目(顾名思义)。

我不确定为什么你不能使用entrySet,因为它对我来说效果很好。我怀疑你做foreach (e : map.entrySet)。这不起作用,因为在MVEL中,属性导航可能意味着几件事,比如bean属性(这意味着它将调用map.getEntrySet()),或者查找一个地图(这意味着它将调用map.get('entrySet')),或获取字段(表示'map.entrySet')。但是所有这些都不适用于您的情况。您只想调用map.entrySet()方法,以便您只需执行foreach (e : map.entrySet())

正确的做法是:

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

答案 1 :(得分:0)

您可以使用以下内容:

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

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

}

输出:

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