Java 如何在groovy中收集类似的列表项

Java 如何在groovy中收集类似的列表项,java,list,grails,collections,groovy,Java,List,Grails,Collections,Groovy,我有一个清单如下 ordersList=[[id:1, amount:1000, salesPerson:'XYZ'], [id:2, amount:3000, salesPerson:'XYZ'], [id:3, amount:1000, salesPerson:'ABC'] ...n items ]; 我想收集具有相同属性“salesPerson”值

我有一个清单如下

    ordersList=[[id:1, amount:1000, salesPerson:'XYZ'], 
                [id:2, amount:3000, salesPerson:'XYZ'], 
                [id:3, amount:1000, salesPerson:'ABC']
                 ...n items

               ];
我想收集具有相同属性“salesPerson”值的物品,以及该“salesPerson”所有订单金额的总和,最后我想有如下列表,这意味着应该为每个“salesPerson”创建一个列表,该列表应该包含所有具有“salesPerson”属性的订单

最后,我希望的清单是

 salesPersonOrdersList = [xyzSalesPersonOrdersList, abcSalesPersonOrdersList]


    xyzSalesPersonOrdersList = [[name:'XYZ'], orders:[[id:1, amount:1000],[id:2, amount:3000]],[totalAmount:4000] ]

    abcSalesPersonOrdersList = [[name:'ABC'], orders:[[id:3, amount:1000]],[totalAmount:1000] ]

如何执行此操作。

使用
groupBy
按名称对项目进行分组:

def ordersList=[[id:1, amount:1000, salesPerson:'XYZ'], 
            [id:2, amount:3000, salesPerson:'XYZ'], 
            [id:3, amount:1000, salesPerson:'ABC']
           ];

ordersList.groupBy{it.salesPerson} 
//------------------------------------------------
//Result: [XYZ:[[id:1, amount:1000, salesPerson:XYZ], [id:2, amount:3000, salesPerson:XYZ]], ABC:[[id:3, amount:1000, salesPerson:ABC]]]
然后,您可以变换地图以满足您的需要,如:

ordersList.groupBy{it.salesPerson}.collect{[name : it.key,orders : it.value]}
//-----------------------------------------------
//Result: [[name:XYZ, orders:[[id:1, amount:1000, salesPerson:XYZ], [id:2, amount:3000, salesPerson:XYZ]]], [name:ABC, orders:[[id:3, amount:1000, salesPerson:ABC]]]]

使用
groupBy
按名称对项目进行分组:

def ordersList=[[id:1, amount:1000, salesPerson:'XYZ'], 
            [id:2, amount:3000, salesPerson:'XYZ'], 
            [id:3, amount:1000, salesPerson:'ABC']
           ];

ordersList.groupBy{it.salesPerson} 
//------------------------------------------------
//Result: [XYZ:[[id:1, amount:1000, salesPerson:XYZ], [id:2, amount:3000, salesPerson:XYZ]], ABC:[[id:3, amount:1000, salesPerson:ABC]]]
然后,您可以变换地图以满足您的需要,如:

ordersList.groupBy{it.salesPerson}.collect{[name : it.key,orders : it.value]}
//-----------------------------------------------
//Result: [[name:XYZ, orders:[[id:1, amount:1000, salesPerson:XYZ], [id:2, amount:3000, salesPerson:XYZ]]], [name:ABC, orders:[[id:3, amount:1000, salesPerson:ABC]]]]