gpt4 book ai didi

java - 根据Java/Grails中的元素从 map 中提取/过滤数据

转载 作者:行者123 更新时间:2023-12-02 15:53:48 25 4
gpt4 key购买 nike

我有一张 map 见下(orginalList),它来自一个oracle数据库,包含元素

def orginalList = 
[
[info:"F123",brand:"BMW",dID:3,price:40000],
[info:"F100",brand:"BMW",dID:3,price:40000],
[info:"F200",brand:"BMW",dID:3,price:40000],
[info:"C344",brand:"mercedes",dID:5,price:50000],
[info:"C354",brand:"mercedes",dID:5,price:50000],
[info:"D355",brand:"Opel",dID:7,price:30000]
]

我将过滤此列表,并将结果放入新列表中,如下面的列表(newList)所示,宝马显示3次,奔驰2次,欧宝1次,并且具有相同的 dID ,所以我会希望根据 dID 将宝马排成一排,两辆奔驰排成一排,欧宝排成一排。并计算总数,如下所示:
def newList =[['infos':'F123_F100_F200', 'brand':'BMW', 'dID':3, 'price':40000, 'total':3], ['infos':'C344_C354', 'brand':'mercedes', 'dID':5, 'price':50000, 'total':2], ['infos':'D355', 'brand':'Opel', 'dID':7, 'price':30000, 'total':1]]

我尝试了类似以下的操作,但这没有得到我想要的结果:
List<Export> result = []
for (Object y : GetUniqueValues(orginalList.dID)){

Export export = new InvoiceExport()
export.dID = y
result << export
}

public static ArrayList GetUniqueValues(Collection values)
{
return new ArrayList(new HashSet(values));
}

谁能提供帮助并举例说明。谢谢

最佳答案

正如@ michal-szulc所说,您作为输入列表发布的实际上是Map。如果您要在Groovy中评估originalList,您将得到:

[info:"D355",brand:"Opel",dID:7,price:30000]

由于数据来自数据库查询,因此很可能您有一个 List<Map<String, Object>>( map 列表)。像这样:
def orginalList = 
[
[info:"F123",brand:"BMW",dID:3,price:40000],
[info:"F100",brand:"BMW",dID:3,price:40000],
[info:"F200",brand:"BMW",dID:3,price:40000],
[info:"C344",brand:"mercedes",dID:5,price:50000],
[info:"C354",brand:"mercedes",dID:5,price:50000],
[info:"D355",brand:"Opel",dID:7,price:30000]
]

那讲得通。如果是这样,您可以使用 groupBy(Closure)collect(Closure)实现所需的内容:
orginalList.groupBy { it.dID }.collect { dID, maps ->
def head = maps.head()

[
infos: maps*.info.join('_'),
brand: head.brand,
dID: head.dID,
price: head.price,
total: maps.size()
]
}
groupBy()通过 MapdID进行分组,生成了 Map<Integer, List<Map<String, Object>>>,如下所示:
[3:[['info':'F123', 'brand':'BMW', 'dID':3, 'price':40000], ['info':'F100', 'brand':'BMW', 'dID':3, 'price':40000], ['info':'F200', 'brand':'BMW', 'dID':3, 'price':40000]], 5:[['info':'C344', 'brand':'mercedes', 'dID':5, 'price':50000], ['info':'C354', 'brand':'mercedes', 'dID':5, 'price':50000]], 7:[['info':'D355', 'brand':'Opel', 'dID':7, 'price':30000]]]

很难阅读,但是它是一个 Map,其键是 bID,值是 ListMap,每个 Map都属于具有相同 bID的车辆。 !

最后, collect()构建一个新的 ListMap,如下所示:
[['infos':'F123_F100_F200', 'brand':'BMW', 'dID':3, 'price':40000, 'total':3], ['infos':'C344_C354', 'brand':'mercedes', 'dID':5, 'price':50000, 'total':2], ['infos':'D355', 'brand':'Opel', 'dID':7, 'price':30000, 'total':1]]

关于java - 根据Java/Grails中的元素从 map 中提取/过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35521634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com