Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除与Groovy/Grails条件相同的重复映射_Groovy - Fatal编程技术网

删除与Groovy/Grails条件相同的重复映射

删除与Groovy/Grails条件相同的重复映射,groovy,Groovy,我想删除与某些条件相同的重复贴图,我有以下贴图: def map = [[name: "111F", invoice:"40",bilD:"aaaa", title:null],[name: "111F", invoice:"40",bilD:"aaaa",title:"something"],[name: "111F", invoice:"40",bilD:"bbbb",title:"something"]] 我尝试使用下面的代码来实现这一点,但它不起作用 def newMap =

我想删除与某些条件相同的重复贴图,我有以下贴图:

    def map = [[name: "111F", invoice:"40",bilD:"aaaa", title:null],[name: "111F", invoice:"40",bilD:"aaaa",title:"something"],[name: "111F", invoice:"40",bilD:"bbbb",title:"something"]]
我尝试使用下面的代码来实现这一点,但它不起作用

 def newMap = map.unique {a, b -> (a.name == b.name && a.invoice == b.invoice && a.bilD == b.bilD)}
我怎样才能得到下面这样的地图

 [
        [name: "111F", invoice:"40",bilD:"aaaa",title:"somethingOrNull"],[name: "111F", invoice:"40",bilD:"bbbb",title:"something"]
        ]

我能想到的最简单的方法是,将所有元素添加到一个集合中,然后将生成的集合转换回列表(注意,您的变量
map
实际上包含一个列表)

我能想到的最短的方法是打电话:

def newMap = (map as Set) as List
Collection.unique(闭包)
根据闭包中的参数数量,其行为会有所不同。当闭包有一个它期望的参数时

…用于比较的值(使用 Comparable#compareTo(java.lang.Object)或 Object#equals(java.lang.Object))

但是,如果闭包包含两个参数,如示例所示,则闭包必须返回一个整数

...with 0 indicating the items are not unique
奇怪的是,两个参数的闭包行为似乎与它的描述完全相反。下面是一个工作示例:

def maps = [
    [name: "111F", invoice:"40",bilD:"aaaa"],
    [name: "111F", invoice:"40",bilD:"aaaa"],
    [name: "111F", invoice:"40",bilD:"bbbb"]
]

assert maps.unique(false) {a, b -> 
    a.name == b.name && a.invoice == b.invoice && a.bilD == b.bilD ? 0 : 1
} == [['name':'111F', 'invoice':'40', 'bilD':'aaaa'], ['name':'111F', 'invoice':'40', 'bilD':'bbbb']]
但是,在您的情况下,您可以简单地使用unique()而不使用闭包:

assert maps.unique(false) == [['name':'111F', 'invoice':'40', 'bilD':'aaaa'], ['name':'111F', 'invoice':'40', 'bilD':'bbbb']]

您的代码确实适用于我的第一个地图示例,但我犯了一个错误,很抱歉,我的地图中还有一个名为(title)的元素,有时是填充的,有时是空的,我编辑了我的问题,当我尝试您的代码时,它返回3个地图,而不是2个。你知道怎么解决这个问题吗?