我的记录为
firstRecord = [ [ name1:'value1', name2:'value2', name3:'value3'],
[ name1:'value1', name2:'value4', name3:'value5' ] ]
我提取了一个列表,其中将name1的值设为
valueList = [ 'value1', 'value1' ]
我有另一张地图
secondRecord = [ value1:[ key1:'value9', key2:'value10' ] ]
我尝试循环浏览valueList
和secondRecord.subMap( [ value1.toString() ] )
我有一张地图
[ value1: [ key1:'value9', key2:'value10' ] ]
我想要一张如下地图(因为valueList
中有两个相同的值,我希望有两个具有相同值的键)
requiredMap = [ value1:[ key1:'value9', key2:'value10'],
value1:[ key1:'value9', key2:'value10' ] ]
但由于它是一张地图,第二张会覆盖第一张,而我只留下一个键/值对。
这可以通过 Groovy 1.5.6 实现吗?
答案 0 :(得分:0)
假设:
firstRecord = [ [ name1:'value1', name2:'value2', name3:'value3'],
[ name1:'value1', name2:'value4', name3:'value5' ] ]
您可以通过以下方式获取valueList
:
valueList = firstRecord.name1
然后,给定secondRecord
:
secondRecord = [ value1:[ key1:'value9', key2:'value10' ] ]
你可以这样做:
result = valueList.inject( [:].withDefault { [] } ) { m, v ->
m[ v ] << secondRecord[ v ]
m
}
,并提供:
assert result == [ value1:[ [ key1:'value9', key2:'value10'],
[ key1:'value9', key2:'value10' ] ] ]
使用groovy 1.5.6 ,您需要执行以下操作:
result = valueList.inject( [:] ) { m, v ->
if( !m[ v ] ) {
m[ v ] = []
}
m[ v ] << secondRecord[ v ]
m
}