groovy函数比较两个删除重复键的地图

时间:2018-10-14 18:16:32

标签: groovy

我有两张(或更多)这样的地图:

def map  = ["John": 34, "Mark":12]
def map2 = ["John": 67, "Foo":123]

无论出于何种原因,我在两个地图上都有重复的键。我想做的是获取具有所有值的另一个映射,但删除重复项(当存在重复的键时,必须采用最大值),输出示例:

map3 = ["John": 67, "Foo":123, "Mark":12]

我的问题是我的代码太复杂了,我认为有一种使用Groovy函数的解决方案。 到目前为止,这是我尝试过的:

def map  = ["John": 342, "Mark":12]
def map2 = ["John": 67, "Foo":123]

map.each {k,v ->
    if(!map2[k]){
        map2.put(k,v)
    }else{
        if(v > map2[k]){
            map2[k] = map[k]
        }
    }
}

assert map2 == [John:342, Foo:123, Mark:12]

这段代码可以很好地工作,但是我发现它过于复杂,并且要对两个以上的地图执行相同的操作很复杂(我想要一个n个地图的解决方案)。

我的问题:

  1. 我可以使用带有Groovy函数或闭包的更少代码来实现相同的结果吗?
  2. 是否有特定的常规方法来比较两个图并删除重复的值?
  3. 如何使用n个映射执行相同的功能?我是否需要递归解决方案?

0 个答案:

没有答案