我在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进行测试
答案 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