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 } 
Смежные вопросы