我有一个查询的Sql ResultSet。它有以下字段:用户名,部门,..责任。 对于deptmt和responsblty,重复的用户名具有不同的值。我想得到一个唯一用户名的地图/列表,其中包含结果集中每个用户的部门和职责列表
所以,如果
resultset = (Sam, dept1,.. resp1),
(Tom, dept1,..resp3),
(Sam,dept2,..resp2),
(Tom,dept3,..resp3)...etc
输出应为
finalList = [["Sam", "dept1,dept2", "resp1,resp2"],["Tom", "dept1,dept3", "resp3"]]
注意事项:
1)可能有n列是变量的(从属性文件中读取列列表),因此代码是可适应的。 _现在不需要,现在是一个固定的清单
2)所有数值用双引号括起并用逗号分隔
3)汤姆责任只包含resp3,因为它重复...即列表中的唯一值。
如何转换结果集?
感谢
答案 0 :(得分:2)
比尔解决方案的一个较短的替代方案是:
def data = [ ['Sam', 'dept1','resp1'],
['Tom', 'dept1','resp3'],
['Sam', 'dept2','resp2'],
['Tom', 'dept2','resp4'] ]
def output = data.groupBy { it[0] }.collect { name, vals ->
$/"$name", "${vals*.getAt( 1 ).join(',')}", "${vals*.getAt( 2 ).join(',')}"/$
}
output.each {
println it
}
打印哪些:
"Sam", "dept1,dept2", "resp1,resp2"
"Tom", "dept1,dept2", "resp3,resp4"
答案 1 :(得分:1)
这应该让你非常接近。请注意,最终输出中没有引号(Groovy不会为字符串打印)。查看代码,您可以看到“输出”是一个列表集合,每个列表包含3个项目:名称,部门字符串的逗号 - sep列表,然后是责任字符串的逗号 - 列表。
顺便说一句,如果你想创建一个逗号sep列表作为最终输出,你可能想在内部字符串中使用逗号以外的东西。
def data = [ ['Sam', 'dept1','resp1'],
['Tom', 'dept1','resp3'],
['Sam', 'dept2','resp2'],
['Tom', 'dept2','resp4'] ]
def tmpmap = [:]
data.each { inputrow ->
def name = inputrow[0]
def curlist = tmpmap[name]
if ( curlist == null ) { // first time seeing this name
curlist = [name,inputrow[1],inputrow[2]]
tmpmap.put( name, curlist );
} else { // seen this name before
curlist[1] += ',' + inputrow[1]
curlist[2] += ',' + inputrow[2]
}
}
output = tmpmap.values()
println output