我想要一些有序的东西:
Map rowToMap(row) {
def rowMap = [:];
row.columns.each{ rowMap[it.name] = it.val }
return rowMap;
}
考虑到GDK的工作方式,我希望能够做一些类似的事情:
Map rowToMap(row) {
row.columns.collectMap{ [it.name,it.val] }
}
但我没在文件里看到任何东西。我是不是遗漏了什么?还是我太懒了?
发布于 2011-04-13 14:47:14
我最近遇到了这样做的需要:将列表转换为映射。这个问题是在Groovy1.7.9之前发布的,所以collectEntries
方法还不存在。它的工作方式与collectMap
方法that was proposed完全相同
Map rowToMap(row) {
row.columns.collectEntries{[it.name, it.val]}
}
如果由于某种原因,您不得不使用旧版本的Groovy,也可以使用inject
方法(如建议的here所示)。这是一个稍微修改过的版本,在闭包中只有一个表达式(只是为了节省字符!):
Map rowToMap(row) {
row.columns.inject([:]) {map, col -> map << [(col.name): col.val]}
}
也可以使用+
运算符代替<<
。
发布于 2008-10-13 18:48:47
查看"inject“。真正的函数式编程专家称之为“折叠”。
columns.inject([:]) { memo, entry ->
memo[entry.name] = entry.val
return memo
}
同时,您可能希望将方法定义为类别,而不是直接在metaClass上定义。这样,您就可以为所有集合定义它一次:
class PropertyMapCategory {
static Map mapProperty(Collection c, String keyParam, String valParam) {
return c.inject([:]) { memo, entry ->
memo[entry[keyParam]] = entry[valParam]
return memo
}
}
}
示例用法:
use(PropertyMapCategory) {
println columns.mapProperty('name', 'val')
}
发布于 2010-12-20 04:34:55
问这个问题时,groupBy方法是否不可用?
https://stackoverflow.com/questions/18538
复制相似问题