2012-10-31 43 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的真正的力量和迷人。