def x = [ [a:1, b:2], [a:1, b:3], [a:2, b:4] ]
def y = [ [f:10, b:2, g:7], [f:100, b:3, g:8], [f:20, b:4, g:9] ]
def mergmaps = { list -> def m = [:] ; list.collect{ m += it}; m }
def result = (x + y).groupBy { it.b }.collect{it.value}.collect{mergmaps(it)}
println result
ZGVmIHggPSBbIFthOjEsIGI6Ml0sIFthOjEsIGI6M10sIFthOjIsIGI6NF0gXSAKZGVmIHkgPSBbIFtmOjEwLCBiOjIsIGc6N10sIFtmOjEwMCwgYjozLCBnOjhdLCBbZjoyMCwgYjo0LCBnOjldIF0KZGVmIG1lcmdtYXBzID0geyBsaXN0IC0+IGRlZiBtID0gWzpdIDsgbGlzdC5jb2xsZWN0eyBtICs9IGl0fTsgbSB9CmRlZiByZXN1bHQgPSAoeCArIHkpLmdyb3VwQnkgeyBpdC5iIH0uY29sbGVjdHtpdC52YWx1ZX0uY29sbGVjdHttZXJnbWFwcyhpdCl9CnByaW50bG4gcmVzdWx0
[[a:1, b:2, f:10, g:7], [a:1, b:3, f:100, g:8], [a:2, b:4, f:20, g:9]]