如何在groovy中合并两个地图

前端之家收集整理的这篇文章主要介绍了如何在groovy中合并两个地图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
题:
如何合并地图,同时总结地图中公共密钥的值.

输入:

[a: 10,b:2,c:3]  
[b:3,c:2,d:5]

产量

[a:10,b:5,c:5,d:5]

扩展问题:
如何通过对2个映射中的公共键的值应用函数(Closure)来合并原始的2个映射.即,而不是简单地总结公共密钥的值,让用户指定要使用的功能.

例如:如果用户想要使用’min’函数而不是求和,那么可以指定min来得到[a:10,b:2,c:2,d:5]作为结果.

解决方法

你可以使用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已经允许了这一点,你获得的收益并不高.

猜你在找的Groovy相关文章