加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在groovy中合并两个地图

发布时间:2020-12-14 16:20:58 所属栏目:大数据 来源:网络整理
导读:题: 如何合并地图,同时总结地图中公共密钥的值. 输入: [a: 10,b:2,c:3] [b:3,c:2,d:5] 产量 [a:10,b:5,c:5,d:5] 扩展问题: 如何通过对2个映射中的公共键的值应用函数(Closure)来合并原始的2个映射.即,而不是简单地总结公共密钥的值,让用户指定要使用的功
题:
如何合并地图,同时总结地图中公共密钥的值.

输入:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读