2016-03-20 15 views
2

Haritaların bir listesi var ve listede belirli bir harita almak ve belirli bir anahtar için değerini döndürmek istiyorum. Eminim eksik bir şeyim var, ama bu işi yapamam. Bazı başarısız girişimlerim var:Groovy: Haritaların bir listesinde bulunan bir anahtarın değerini bul/bul

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' 
    } 

Bu işi yapmak için temiz bir yol var mı?

+1

'anahtar == 'color'' yapabilirsiniz - Bu hiçbir şey yapmaz. –

+0

@OliverCharlesworth, 'bul' kapanışı –

+0

@tim_yates bağlamında yapar - Sadece ima edilen 'dönüş' olarak - bu kapanışın açık bir 'dönüşü' olsa da. –

cevap

3

Sadece

String favoriteColour = favorites.findResult { it.color } 
İlgili konular