在Groovy中合并和聚合数据

在Groovy中合并和聚合数据,groovy,group-by,sum,aggregate,Groovy,Group By,Sum,Aggregate,我想知道在Groovy中聚合这些数据的最佳方法是什么 假设我有以下数据: [ [id: 1, name: bob, age:20, numberOfPackages: 10, numberOfPurchases:20 ], [id: 1, name: bob, age:20, numberOfPackages: 5, numberOfPurchases:6 ], [id: 2, name: Rob, age:22, numberOfPackages: 3, numberOfPu

我想知道在Groovy中聚合这些数据的最佳方法是什么

假设我有以下数据:

[
   [id: 1, name: bob, age:20, numberOfPackages: 10, numberOfPurchases:20 ],
   [id: 1, name: bob, age:20, numberOfPackages: 5, numberOfPurchases:6 ],
   [id: 2, name: Rob, age:22, numberOfPackages: 3, numberOfPurchases:5 ],
]
我想将其转换为以下内容(合并id/姓名/年龄,但合并价格/每个id的购买数量):

它可能是,例如:

def data = [
    [id: 1, name: 'bob', age:20, price: 10, numberOfPurchases:20 ],
    [id: 1, name: 'bob', age:20, price: 5, numberOfPurchases:6 ],
    [id: 2, name: 'rob', age:22, price: 3, numberOfPurchases:5 ],
]

data.groupBy { it.id }.collectEntries { 
    [
        (it.key): [
            name: it.value.name.first(), 
            age: it.value.first(), 
            price: it.value.sum { it.price },
            numberOfPurchases: it.value.sum { it.numberOfPurchases },
        ]
    ] 
 }
它可能是,例如:

def data = [
    [id: 1, name: 'bob', age:20, price: 10, numberOfPurchases:20 ],
    [id: 1, name: 'bob', age:20, price: 5, numberOfPurchases:6 ],
    [id: 2, name: 'rob', age:22, price: 3, numberOfPurchases:5 ],
]

data.groupBy { it.id }.collectEntries { 
    [
        (it.key): [
            name: it.value.name.first(), 
            age: it.value.first(), 
            price: it.value.sum { it.price },
            numberOfPurchases: it.value.sum { it.numberOfPurchases },
        ]
    ] 
 }

将价格和购买数量分别相加没有什么意义,你的意思是:

def data = [
    [id: 1, name: 'bob', age:20, price: 10, numberOfPurchases:20],
    [id: 1, name: 'bob', age:20, price:  5, numberOfPurchases:6],
    [id: 2, name: 'rob', age:22, price:  3, numberOfPurchases:5]
]

data.groupBy { [id:it.id, name:it.name, age:it.age] }.collect { k, v ->
    [id:k.id,
     name:k.name,
     age:k.age,
     spend:v.collect { it.price * it.numberOfPurchases }.sum()]
}
其中:

[
    [id:1, name:'bob', age:20, spend:230],
    [id:2, name:'rob', age:22, spend:15]
]

将价格和购买数量分别相加没有什么意义,你的意思是:

def data = [
    [id: 1, name: 'bob', age:20, price: 10, numberOfPurchases:20],
    [id: 1, name: 'bob', age:20, price:  5, numberOfPurchases:6],
    [id: 2, name: 'rob', age:22, price:  3, numberOfPurchases:5]
]

data.groupBy { [id:it.id, name:it.name, age:it.age] }.collect { k, v ->
    [id:k.id,
     name:k.name,
     age:k.age,
     spend:v.collect { it.price * it.numberOfPurchases }.sum()]
}
其中:

[
    [id:1, name:'bob', age:20, spend:230],
    [id:2, name:'rob', age:22, spend:15]
]

你想把价格加起来吗?不求和价格*每行的购买数量?如果任何答案符合您的期望,请接受。我想求和价格。为了避免混淆,我对示例进行了编辑。您想对价格求和吗?不求和价格*每行的购买数量?如果任何答案符合您的期望,请接受。我想求和价格。为了避免混淆,我编辑了这个例子。很好!但是,我刚才使用的值是虚拟示例值,这在实际案例场景中确实更有意义。我将编辑我的问题,使用一些更好的虚拟值。很好!但是,我刚才使用的值是虚拟示例值,这在实际案例场景中确实更有意义。我将编辑我的问题,以使用一些更好的虚拟值。