2012-10-31 19 views
0

您好我有收藏在我的控制器为前说如何从groovy中的地图获取值?

def devices=[ [id:PPL000000011906, firstName:Adam, lastName:Baines], [id:PPL000000010836, firstName:Adam, lastName:Baines], [id:PPL000000015137, firstName:Adan, lastName:Saenz], [id:PPL000000015136, firstName:Adan, lastName:Saenz]] 

我会越来越从我的观点的ID。我如何根据ID从我的地图获取名字和姓氏值。

感谢, 西瓦

+0

这不是一张地图。这甚至不是有效的Groovy。你可以编辑你的问题,使其更有意义吗? –

+0

在groovy中,每个集合都被视为一张地图,所以我将它作为一张地图来提及,尽管它包含数组列表 – Siva

+0

不,它不是。无论如何,该代码仍然无法编译。你错过了你说的数组元素之间的逗号,但我怀疑是列表。你可以编辑你的问题,以真正把一个有效的例子? –

回答

2

基本上,你可以使用find来定位与给定id列表条目。这里有一个例子

def devices = [ [id:'PPL000000011906', firstName:'Adam', lastName:'Baines'], 
       [id:'PPL000000010836', firstName:'Adam', lastName:'Baines'], 
       [id:'PPL000000015137', firstName:'Adan', lastName:'Saenz'], 
       [id:'PPL000000015136', firstName:'Adan', lastName:'Saenz'] ] 

Closure<String> nameForId = { String id -> 
    devices.find { it.id == id }?.with { map -> 
    "$map.firstName $map.lastName" 
    } 
} 

assert nameForId('PPL000000015136') == 'Adan Saenz' 
0

我想这样做是为了得到一个单场:

devices.find { it.id == 'PPL000000011906' }?.firstName 

如果你想关闭和参数我这样做:如果你想去

def findPerson = { person -> devices.find { it.id == person } } 
def myPerson = findPerson('PPL000000011906') 
println "FirstName: ${myPerson?.firstName} LastName: ${myPerson?.lastName}" 

疯狂你可以这样做:

ArrayList.metaClass.findThingInMap = { field, value -> delegate.find { it[field] == value } } 

Wha这样做可以让你在包含哈希映射的任何数组列表中找到一个字段的值,这就是你所拥有的。

def myPerson = devices.findThingInMap('id', 'PPL000000011906') 
println "FirstName: ${myPerson?.firstName} LastName: ${myPerson?.lastName}" 

我不会那样做,除非你需要灵活性,但这显示了groovy的真正的力量和迷人。