Groovy:通过映射列表中的键查找/返回映射的值

Les*_*ieV 3 collections groovy dictionary

我有一个地图列表,我想获取列表中的特定地图并返回给定键的值。我确信我缺少一些基本的东西,但我无法完成这项工作。我有几次失败的尝试:

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'
    }
Run Code Online (Sandbox Code Playgroud)

有没有一种干净的方法来完成这项工作?

tim*_*tes 7

你可以简单地做

String favoriteColour = favorites.findResult { it.color }
Run Code Online (Sandbox Code Playgroud)