Arrays 在数组列表中连接嵌套数组
我希望有一个具有唯一字段的项目数组列表,但也要有一组它们使用并可以覆盖的基本字段或默认字段 这样做(如下所示)几乎完成了我想要的一切——只需在所有列表项上循环,并与我的“默认”字段列表连接。因此,例如,如果未指定,字段2将设置为Arrays 在数组列表中连接嵌套数组,arrays,groovy,Arrays,Groovy,我希望有一个具有唯一字段的项目数组列表,但也要有一组它们使用并可以覆盖的基本字段或默认字段 这样做(如下所示)几乎完成了我想要的一切——只需在所有列表项上循环,并与我的“默认”字段列表连接。因此,例如,如果未指定,字段2将设置为“2222222”,但如果已指定(如在第一项中),则会覆盖它。但我也希望嵌套数组(field4)不被完全覆盖,而是被追加。因此,在我的示例中,arrCombine中的项中的字段4不会用它们自己的字段覆盖[“defaultValue”],而是添加到它中,比如[“defaul
“2222222”
,但如果已指定(如在第一项中),则会覆盖它。但我也希望嵌套数组(field4)不被完全覆盖,而是被追加。因此,在我的示例中,arrCombine中的项中的字段4不会用它们自己的字段覆盖[“defaultValue”]
,而是添加到它中,比如[“defaultValue”、“一”、“四”]
和[“defaultValue”、“一”、“二”]
。有没有Groovy主义/捷径可以做到这一点
def arrNewItems = [
[
"field1" : "zzzzz",
"field2" : 'eeeeeee',
"field3" : 'wwwwwwwwwwww',
"field4" : ['one','four'],
],
[
"field1" : "zzzzz",
"field3" : 'sldkjflskdjflksdjf',
"field4" : ['one','two'],
],
]
arrCombine = arrNewItems.collect {item ->
defaultData = [
"field1" : "111111111111111",
"field2" : "222222222222222",
"field3" : "333333333333333",
"field4" : ["defaultValue"],
"field5" : "555555555555555",
]
return item + defaultData
}
println arrCombine
我不会说这很漂亮,但下面的代码:
def a = [
[
"field1": "zzzzz",
"field2": 'eeeeeee',
"field3": 'wwwwwwwwwwww',
"field4": ['one','four'],
],
[
"field1": "zzzzz",
"field3": 'sldkjflskdjflksdjf',
"field4": ['one','two'],
],
]
def b = [
"field1": "111111111111111",
"field2": "222222222222222",
"field3": "333333333333333",
"field4": ["defaultValue"],
"field5": "555555555555555",
]
def c = a.collect { am ->
am.collectEntries { k, av ->
def bv = b[k]
if (av instanceof List &&
bv instanceof List) [k, av + bv]
else if (bv == null) [k, av]
else [k, bv]
} + b.findAll { k, v -> !am[k] }
}
c.each { m ->
println "-----"
m.each { k, v ->
println "$k -> $v"
}
}
运行时,生成:
─➤ groovy solution.groovy
-----
field1 -> 111111111111111
field2 -> 222222222222222
field3 -> 333333333333333
field4 -> [one, four, defaultValue]
field5 -> 555555555555555
-----
field1 -> 111111111111111
field3 -> 333333333333333
field4 -> [one, two, defaultValue]
field2 -> 222222222222222
field5 -> 555555555555555
这个问题使我希望有一个groovymap.plus(otherMap){k1,v1,k2,v2->…}
方法或类似的东西,即map+map
构造的定制。没有这样的运气。这是我能做的最不难看的了
您还可以通过将代码从bv instanceof List][k,av+bv]
更改为bv instanceof List][k,bv+av]
来颠倒bv instanceof List][k,bv+av]
的顺序