从没有重复项的列表中获取(Groovy)

从没有重复项的列表中获取(Groovy),groovy,Groovy,我有下面的列表和代码 def myList = [[id:8100-04, name:AAA, code:2281], [id:8100-05, name:BBB, code:2102], [id:8100-06, name:CCC, code:6089], [id:8100-07, name:CCC, code:6089], [id:8100-08, name:CCC, code:6

我有下面的列表和代码

def myList = [[id:8100-04, name:AAA, code:2281], 
             [id:8100-05, name:BBB, code:2102], 
             [id:8100-06, name:CCC, code:6089], 
             [id:8100-07, name:CCC, code:6089], 
             [id:8100-08, name:CCC, code:6089]]
//list is retrived but looks something like the above

def newList = myList.findAll { 
            (it.get("Name").equals("AAA") || 
                it.get("Name").equals("BBB") || 
                it.get("Name").equals("AFBO") ||
                it.get("Name").equals("CCC")) }
def filteredListData = newList.collect { getListData(it.get("Id"), it.get("Name"), 
                                          it.get("Code")) }
我想检索我的所有newList,如果有重复项,则检索id索引最低的条目

因此,从我的列表中,我希望结果是:

[[id:8100-04, name:AAA, code:2281], 
[id:8100-05, name:BBB, code:2102], 
[id:8100-06, name:CCC, code:6089]]
你就快到了

def myList = [
                 [id:"8100-04", name:"AAA", code:2281], 
                 [id:"8100-05", name:"BBB", code:2102], 
                 [id:"8100-06", name:"CCC", code:6089], 
                 [id:"8100-07", name:"CCC", code:6089], 
                 [id:"8100-08", name:"CCC", code:6089]
             ]

def newList = myList.findAll { 
                it.name in ["AAA", "BBB", "AFBO", "CCC"]
               }

def map = [:]

newList.each{
    if(!map.get(it.name))
        map.put(it.name, it)

}               

println map*.value
输出:

[
 [id:8100-04, name:AAA, code:2281],
 [id:8100-05, name:BBB, code:2102],
 [id:8100-06, name:CCC, code:6089]
]
你就快到了

def myList = [
                 [id:"8100-04", name:"AAA", code:2281], 
                 [id:"8100-05", name:"BBB", code:2102], 
                 [id:"8100-06", name:"CCC", code:6089], 
                 [id:"8100-07", name:"CCC", code:6089], 
                 [id:"8100-08", name:"CCC", code:6089]
             ]

def newList = myList.findAll { 
                it.name in ["AAA", "BBB", "AFBO", "CCC"]
               }

def map = [:]

newList.each{
    if(!map.get(it.name))
        map.put(it.name, it)

}               

println map*.value
输出:

[
 [id:8100-04, name:AAA, code:2281],
 [id:8100-05, name:BBB, code:2102],
 [id:8100-06, name:CCC, code:6089]
]
这里有一个更“功能型”的解决方案。我们按名称分组,这将为每个名称提供一个列表。然后我们对每个列表进行排序,并获取其第一个元素

def myList = [[id:'8100-04', name:'AAA', code:2281], 
             [id:'8100-05', name:'BBB', code:2102], 
             [id:'8100-07', name:'CCC', code:6089], 
             [id:'8100-06', name:'CCC', code:6089], 
             [id:'8100-08', name:'CCC', code:6089]]

def newList = myList.findAll { 
                it.name in ["AAA", "BBB", "AFBO", "CCC"]
               }

def groups = newList.groupBy {it -> it.name}

def lowestIds = groups.collect({it.value.sort{it.id}[0]})

println lowestIds
更简单的是:

newList.sort{it.id}.unique{it.name}

println newList
这里有一个更“功能型”的解决方案。我们按名称分组,这将为每个名称提供一个列表。然后我们对每个列表进行排序,并获取其第一个元素

def myList = [[id:'8100-04', name:'AAA', code:2281], 
             [id:'8100-05', name:'BBB', code:2102], 
             [id:'8100-07', name:'CCC', code:6089], 
             [id:'8100-06', name:'CCC', code:6089], 
             [id:'8100-08', name:'CCC', code:6089]]

def newList = myList.findAll { 
                it.name in ["AAA", "BBB", "AFBO", "CCC"]
               }

def groups = newList.groupBy {it -> it.name}

def lowestIds = groups.collect({it.value.sort{it.id}[0]})

println lowestIds
更简单的是:

newList.sort{it.id}.unique{it.name}

println newList

以下是解决以下问题的脚本:

  • 未排序的项目,请注意下面的
    myList
    中的顺序已更改
  • OP没有提到重复的标准。根据
    名称和代码
def myList=[[id:'8100-07',名称:'CCC',代码:6089],
[id:'8100-04',名称:'AAA',代码:2281],
[id:'8100-05',名称:'BBB',代码:2102],
[id:'8100-06',名称:'CCC',代码:6089],
[id:'8100-08',名称:'CCC',代码:6089]]
def newList=myList.findAll{
it.get(“name”).equals(“AAA”)||
it.get(“name”).equals(“BBB”)||
it.get(“name”).equals(“AFBO”)||
it.get(“name”).equals(“CCC”)
} 
//按订单id、名称和代码字段排序
定义条件={a,b->a.id b.id?:a.name b.name?:a.code?:b.code}
//按名称和代码分组;应用排序;获取第一项;对最终结果应用排序

def result=newList.groupBy({it.name},{it.code}).injection([]){li,k,v->v.collect{key,value->li以下是脚本地址:

  • 未排序的项目,请注意下面的
    myList
    中的顺序已更改
  • OP没有提到重复的标准。这考虑了基于
    名称和代码的重复
def myList=[[id:'8100-07',名称:'CCC',代码:6089],
[id:'8100-04',名称:'AAA',代码:2281],
[id:'8100-05',名称:'BBB',代码:2102],
[id:'8100-06',名称:'CCC',代码:6089],
[id:'8100-08',名称:'CCC',代码:6089]]
def newList=myList.findAll{
it.get(“name”).equals(“AAA”)||
it.get(“name”).equals(“BBB”)||
it.get(“name”).equals(“AFBO”)||
it.get(“name”).equals(“CCC”)
} 
//按订单id、名称和代码字段排序
定义条件={a,b->a.id b.id?:a.name b.name?:a.code?:b.code}
//按名称和代码分组;应用排序;获取第一项;对最终结果应用排序

def result=newList.groupBy({it.name},{it.code}).inject([]){li,k,v->v.collect{key,value->li如果原始列表是按id排序的,则该选项有效。否则,您必须先进行排序,或者查看我的解决方案。如果原始列表是按id排序的,则该选项有效。否则,您必须先进行排序,或者查看我的解决方案。JCK,希望重复项应根据
名称和代码
进行标识。请检查答案。JCK,Hope dupli应根据
名称和代码
识别cate。请检查答案。