我正在尝试使用每个闭包将地图添加到列表中。样本就像这样
def list = [1, 2, 3, 4]
def titles = []
def map = [:]
list.each{
map.put('index', xxxx)
map.put('title', xxxxx)
titles.add(map)
}
如果我打印最终切片列表的值,我会注意到地图项只重复列表中第一项的值。看起来地图只会覆盖原始列表中第一个项目的值。
为什么会发生这种情况以及获取地图正确值的方法是什么
答案 0 :(得分:2)
每次添加相同的地图实例,然后每个循环更改所有这些实例
在每个闭包内移动def map = [:]
答案 1 :(得分:1)
正如另一张海报评论的那样,你需要在每个闭包内实例化一个新的地图。但是,你可以做更多这样的事情' Groovier'像这样:
def list = [1, 2, 3, 4]
def titles = []
list.each{ value -> titles << ['index':'xxx', 'title':'xxxx'] }
在您的示例中,您在迭代时甚至没有使用列表中的值。如果您只是想强制它处理特定次数的迭代,您可以将其更改为:
def titles = []
list.each{ value -> titles << ['index':'xxx', 'title':'xxxx'] }
或者更简单地说,使用范围:
(1..4)*.collect{ idx -> ['index':idx, 'title':"$idx:xxxx"] }.flatten()
生成地图列表:
[[index:1, title:1:xxxx], [index:2, title:2:xxxx], [index:3, title:3:xxxx], [index:4, title:4:xxxx]]