题:
如何合并地图,同时总结地图中公共密钥的值.
如何合并地图,同时总结地图中公共密钥的值.
输入:
[a: 10,b:2,c:3] [b:3,c:2,d:5]
产量
[a:10,b:5,c:5,d:5]
扩展问题:
如何通过对2个映射中的公共键的值应用函数(Closure)来合并原始的2个映射.即,而不是简单地总结公共密钥的值,让用户指定要使用的功能.
解决方法
你可以使用inject with?:for for map的值为null:
map1 = [a:10,c:3] map2 = [b:3,d:5] (map1.keySet() + map2.keySet()) .inject([:]) {m,k -> m[k] = (map1[k] ?: 0) + (map2[k] ?: 0); m }
评估为
[a:10,d:5]
或者你可以使用collectEntries(这样的闭包不是那么难看):
map1 = [a:10,d:5] (map1.keySet() + map2.keySet()) .collectEntries {[(it) : (map1[it] ?: 0) + (map2[it] ?: 0)]}
为了使这个通用,允许传入一个闭包.但是collectEntries已经允许了这一点,你获得的收益并不高.