如果Groovy中存在相同ID的值,则将NULL替换为value

时间:2019-07-12 12:42:03

标签: groovy

如果我有一个看起来像这样的ArrayList:

[10aBl,NULL,06/02/2104]
[10aBl,100,12/12/2016]
[cs30h,845,13/07/2017]
[cs30h,845,17/09/2017]
[cs30h,NULL,01/02/2013]

如何用与ID(第1列)匹配的ID的第2列中的现有值替换第2列中的NULL,即

[10aBl,100,06/02/2104]
[10aBl,100,12/12/2016]
[cs30h,845,13/07/2017]
[cs30h,845,17/09/2017]
[cs30h,845,01/02/2013]

谢谢。

1 个答案:

答案 0 :(得分:0)

一个2分钟的解决方案就是

def a = [ '10aBl,NULL,06/02/2104', '10aBl,100,12/12/2016', 'cs30h,845,13/07/2017','cs30h,845,17/09/2017','cs30h,NULL,01/02/2013' ].collect{ it.split(',') }

def replacements = a.collectEntries{ 'NULL' != it[ 1 ] ? it[ 0..1 ] : [:] }
a.each{ if( 'NULL' == it[ 1 ] ) it[ 1 ] = replacements[ it[ 0 ] ] }

assert '[[10aBl, 100, 06/02/2104], [10aBl, 100, 12/12/2016], [cs30h, 845, 13/07/2017], [cs30h, 845, 17/09/2017], [cs30h, 845, 01/02/2013]]' == a.toString()