如何在groovy中从映射中获取值?

如何在groovy中从映射中获取值?,groovy,Groovy,嗨,我的控制器中有ex say的集合 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]]

嗨,我的控制器中有ex say的集合

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从地图中获取firstname和lastname值

谢谢,
Siva

基本上,您可以使用
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'
def devices=[[id:'PPL000000011906',名字:'Adam',姓氏:'Baines'],
[id:'PPL000000010836',名:'Adam',姓:'Baines'],
[id:'PPL000000015137',名:'Adan',姓:'Saenz'],
[id:'PPL000000015136',名:'Adan',姓:'Saenz']
闭包名称forid={String id->
devices.find{it.id==id}?。带有{map->
“$map.firstName$map.lastName”
}
}
断言nameForId('PPL000000015136')=='Adan Saenz'

我会这样做以获得单个字段:

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 } }
这允许您在任何包含哈希映射的数组列表中查找字段的值,这就是您所拥有的

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

除非您需要灵活性,否则我不会这么做,但这显示了groovy的真正威力和惊人之处。

这不是地图。它甚至不是有效的Groovy。你能编辑你的问题让它更有意义吗?在groovy中,每一个集合都被视为一个映射,所以我提到它是一个映射,尽管它包含数组列表。不,它不是。不管怎样,这些代码仍然无法编译。元素之间缺少逗号,你说是数组,但我怀疑是列表。你能编辑你的问题,把一个有效的例子放进去吗?是的,你能指导我怎么做吗?