首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从groovy中的列表创建地图的快捷方式?

从groovy中的列表创建地图的快捷方式?
EN

Stack Overflow用户
提问于 2008-08-20 18:37:51
回答 8查看 69.1K关注 0票数 116

我想要一些有序的东西:

代码语言:javascript
复制
Map rowToMap(row) {
    def rowMap = [:];
    row.columns.each{ rowMap[it.name] = it.val }
    return rowMap;
}

考虑到GDK的工作方式,我希望能够做一些类似的事情:

代码语言:javascript
复制
Map rowToMap(row) {
    row.columns.collectMap{ [it.name,it.val] }
}

但我没在文件里看到任何东西。我是不是遗漏了什么?还是我太懒了?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-13 14:47:14

我最近遇到了这样做的需要:将列表转换为映射。这个问题是在Groovy1.7.9之前发布的,所以collectEntries方法还不存在。它的工作方式与collectMap方法that was proposed完全相同

代码语言:javascript
复制
Map rowToMap(row) {
    row.columns.collectEntries{[it.name, it.val]}
}

如果由于某种原因,您不得不使用旧版本的Groovy,也可以使用inject方法(如建议的here所示)。这是一个稍微修改过的版本,在闭包中只有一个表达式(只是为了节省字符!):

代码语言:javascript
复制
Map rowToMap(row) {
    row.columns.inject([:]) {map, col -> map << [(col.name): col.val]}
}

也可以使用+运算符代替<<

票数 131
EN

Stack Overflow用户

发布于 2008-10-13 18:48:47

查看"inject“。真正的函数式编程专家称之为“折叠”。

代码语言:javascript
复制
columns.inject([:]) { memo, entry ->
    memo[entry.name] = entry.val
    return memo
}

同时,您可能希望将方法定义为类别,而不是直接在metaClass上定义。这样,您就可以为所有集合定义它一次:

代码语言:javascript
复制
class PropertyMapCategory {
    static Map mapProperty(Collection c, String keyParam, String valParam) {
        return c.inject([:]) { memo, entry ->
            memo[entry[keyParam]] = entry[valParam]
            return memo
        }
    }
}

示例用法:

代码语言:javascript
复制
use(PropertyMapCategory) {
    println columns.mapProperty('name', 'val')
}
票数 30
EN

Stack Overflow用户

发布于 2010-12-20 04:34:55

问这个问题时,groupBy方法是否不可用?

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档