3

我在 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 对其进行测试

4

2 回答 2

2

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

...有一种方法可以返回键数组(entrySet),而我的情况并非如此

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

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

我不确定为什么你不能使用entrySet它,因为它对我来说很好用。我怀疑你有做foreach (e : map.entrySet)。那是行不通的,因为在 MVEL 中,属性导航可能意味着几件事,比如 bean 属性(这意味着它将调用map.getEntrySet()),或者查找地图(这意味着它将调用map.get('entrySet')),或者获取字段(这意味着 'map.入口集')。但是,所有这些都不适用于您的情况。你只是想调用map.entrySet()方法,这样你就应该这样做 foreach (e : map.entrySet())

正确的做法是这样的:

map = ['a':'a1', 'b':'b1'] ; 
foreach(entry : map.entrySet()) {
    System.out.println('key ' + entry.key + ' value ' + entry.value)
};
于 2013-06-27T07:42:41.023 回答
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
于 2013-06-27T07:06:51.893 回答