我有以下列表和代码
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索引的条目。
所以从myList我正在寻找结果:
[[id:8100-04, name:AAA, code:2281],
[id:8100-05, name:BBB, code:2102],
[id:8100-06, name:CCC, code:6089]]
答案 0 :(得分:0)
你快到了。
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]
]
答案 1 :(得分:0)
这是一个更“功能性”的解决方案。我们按名称分组,这给出了每个名称的列表。然后我们对每个列表进行排序并获取其第一个元素。
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
答案 2 :(得分:0)
以下是解决的脚本:
myList
下方更改。name and code
def myList = [[id:'8100-07', name:'CCC', code:6089],
[id:'8100-04', name:'AAA', code:2281],
[id:'8100-05', name:'BBB', code:2102],
[id:'8100-06', name:'CCC', code:6089],
[id:'8100-08', name:'CCC', code: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")
}
//Sort by order id, name and code fields
def criteria = { a,b -> a.id <=> b.id ?: a.name <=> b.name ?: a.code?: b.code }
//Group by name and code ; apply sort; get the first item; apply sort on final result
def result = newList.groupBy({it.name}, {it.code}).inject([]){li, k, v-> v.collect {key, value -> li << value.sort(criteria)[0]}; li}.sort(criteria)
println result
您可以快速在线试用 Demo