Groovy 要为每个映射键生成一个列表作为遍历列表?
我有一个映射,我需要在groovy中向每个映射键插入一个生成的列表,因为我正在遍历一个列表 代码:Groovy 要为每个映射键生成一个列表作为遍历列表?,groovy,syntax,Groovy,Syntax,我有一个映射,我需要在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 eleme
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
您可以使用
[key:value]
符号创建映射。由于您的值是由两个元素组成的数组,您只需使用[element1,element2]
符号创建它,然后您就可以使用将对象添加到地图中
因此,这个
myMap您可以使用方法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]]
编辑:抱歉,我忽略了这样一个事实,即您希望得到一个映射。这里有一种类似于上述方法的方法。在这种情况下,您可以使用每个
遍历列表中的元素:
def originalList = [[name: 'franz', age: 12], [name: 'bepi', age: 20],[name: 'giovanni', age: 65]]
def result=[:]
originalList.each{obj->
def e1 = obj.age
def e2 = obj.age*2
result.put(obj, [e1,e2]) //key, value
}
println result //[[name:franz, age:12]:[12, 24], [name:bepi, age:20]:[20, 40], [name:giovanni, age:65]:[65, 130]]
谢谢你的帮助!我只需要在列表中的特定索引中定义元素!这样我就可以根据每个元素的index@Mich对不起,我误解了您的要求。您的意思是什么?使用索引而不是“$object”
作为您在地图中的键?我的意思是在用作地图值的两个元素列表中!一个元素应该具有索引0,另一个元素具有索引1可能有点混淆,我混淆了您!在第一种方法中,元素1和元素2在该列表中是否具有固定索引?@albciff如果您需要使用对象对地图进行索引(不仅仅是对象的toString值,包装在GString中),您应该使用[(对象):[element1,element2]].我不知道他们从那以后是否在groovy中解决过这个问题,但在映射中使用GString作为键曾经是一种罪恶,因为GString不是不可变的,它们的哈希代码可能会不同。你想要什么作为结果映射的键?你能给出一个示例输入吗?你能给出一个示例输出吗?没有这些,每个人都在猜测如果你看我的代码,那么这个对象就是映射的键,生成的两个元素的列表就是值,那么从这个问题中你到底希望得到什么答案!不幸的是,我仍然不明白你想说什么。
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]]
def originalList = [[name: 'franz', age: 12], [name: 'bepi', age: 20],[name: 'giovanni', age: 65]]
def result=[:]
originalList.each{obj->
def e1 = obj.age
def e2 = obj.age*2
result.put(obj, [e1,e2]) //key, value
}
println result //[[name:franz, age:12]:[12, 24], [name:bepi, age:20]:[20, 40], [name:giovanni, age:65]:[65, 130]]