2016-03-20 3 views
2

私はマップのリストを持っています。リスト上の特定のマップを取得し、特定のキーの値を返したいとします。 私は抜けているものがあると確信していますが、私はこの作業をすることができません。私はいくつか失敗した試みを持っています:Groovy:マップのリストをキーで検索/返す

void "find map by key in a list of maps"() { 
     given: "a list of maps" 
     List favorites = [ 
       [fruit: 'apple'], 
       [color: 'yellow'], 
       [activity: 'reading']] 

     when: 
     String favoriteColor = favorites.each { 
      it.find { key, value -> 
       key == 'color' 
       return value 
      } 
     } 

//  String favoriteColor = favorites.each { it['color'] } 
//  String favoriteColor = favorites.find { it.key == 'color' } 
//  String favoriteColor = favorites.collect { it['color'] } 
//  String favoriteColor = favorites*.get('color') 
//  String favoriteColor = favorites*.get('color').value 
//  String favoriteColor = favorites.collect { it['color'] }.value as String 
//  String favoriteColor = favorites.find { it['color'] }.value as String 

     then: 
     favoriteColor == 'yellow' 
    } 

これを行うには清潔な方法がありますか?

+1

'キー==「color''を行うことができます - これは何もしません。 –

+0

@OliverCharlesworthこれは 'find'クロージャのコンテキストで行います –

+0

@tim_yates - 暗黙の' return'としてのみ - このクロージャは明示的な 'return'を持っています。 –

答えて

3

あなたは、単に

String favoriteColour = favorites.findResult { it.color } 
関連する問題