我有一张地图,我需要在groovy中为每个地图键插入生成的列表,因为我正在遍历列表!
代码:
def myMap = [:]
anotherList.each{
object -> //here i do some work to get two elements
def element1 = ..
def element2 = ..
// so here i need to generate a list for the two elements with index 0 and 1
myMap[obejct]= ['list', my list]
}
return myMap
答案 0 :(得分:1)
您可以使用[ key: value]
表示法创建地图。由于您的值是两个元素的数组,您可以使用[element1,element2]
表示法创建它,然后您可以使用<<
operator将对象添加到地图中。
所以这个myMap << [ (object) : [element1,element2]]
可以完成这项工作。
在您的代码中:
def myMap = [:]
anotherList.each{
object -> //here i do some work to get two elements
def element1 = ..
def element2 = ..
// so here i need to generate a list for the two elements with index 0 and 1
myMap << [ (object) : [element1,element2]]
}
return myMap
请注意,我使用(object)
来评估密钥,因为如果直接使用object
,则字面值将用作地图中的键而不是值。
希望这有帮助,
根据OP评论更新:
如果我很了解您的要求,您希望地图键是索引而不是值不是吗?为此,您可以使用eachWithIndex
代替each
,例如:
def myMap = [:]
def anotherList = ['a','b','c','d']
anotherList.eachWithIndex{ object,index -> //here i do some work to get two elements
def element1 = object + 'z'
def element2 = object + 'x'
// so here i need to generate a list for the two elements with index 0 and 1
myMap << [ (index) : [element1,element2]]
}
return myMap //Result: [0:[az, ax], 1:[bz, bx], 2:[cz, cx], 3:[dz, dx]]
答案 1 :(得分:1)
您可以使用方法~>
浏览列表并生成另一个列表,其值取决于原始列表(您在此方法中使用的推理由您决定。这里有一个小例子:
collect
编辑:对不起,我忽略了你希望得到一张地图的事实。这是一种类似于上述方法的方法。在这种情况下,您可以使用 def originalList = [1,2,3]
def result = originalList.collect{obj->
def e1 = obj
def e2 = obj*2
[e1,e2]
}
println result //[[1,1],[2,4],[3,6]]
浏览列表中的元素:
each