1

こんにちは、たとえばコントローラーにコレクションがあります

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 に基づいてマップから名と姓の値を取得するにはどうすればよいですか。

ありがとう、シヴァ

4

2 に答える 2

3

基本的に、 を使用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'
于 2012-10-31T10:04:08.223 に答える
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 } }

これにより、ハッシュマップを含む配列リスト内のフィールドの値を見つけることができます。これはあなたが持っているものです。

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

柔軟性が必要でない限り、私は実際にはそうしませんが、これは groovy の真の力と素晴らしさを示しています。

于 2016-04-09T20:35:52.490 に答える