对象集合分组然后求和

Posted znj-wu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象集合分组然后求和相关的知识,希望对你有一定的参考价值。

对象集合分组然后求和

public static void main(String[] args) {
        List<ProductInformation> productInformationList = Lists.newArrayList();
        ProductInformation p1 = new ProductInformation();
        p1.setPartNum("123456");
        p1.setRecommendHomeOrder(11);
        ProductInformation p2 = new ProductInformation();
        p2.setPartNum("123456");
        p2.setRecommendHomeOrder(12);
        ProductInformation p3 = new ProductInformation();
        p3.setPartNum("123457");
        p3.setRecommendHomeOrder(13);
        productInformationList.add(p1);
        productInformationList.add(p2);
        productInformationList.add(p3);

        // 取出partNum 等于 123456 的数据
        List<ProductInformation> collect = productInformationList.stream().filter(p -> p.getPartNum().equals("123456")).collect(Collectors.toList());
        for (ProductInformation productInformation: collect) {
            System.out.println("partNum 等于 123456 的数据->"+productInformation.getPartNum());
        }
        //根据 partNum 去重,
        List<ProductInformation> collect1 = productInformationList.stream().filter(distinctByKey(p -> p.getPartNum())).collect(Collectors.toList());
        for (ProductInformation productInformation: collect1) {
            System.out.println("去重后的数据->"+productInformation.getPartNum());
        }
        //求和
        //Integer sum = productInformationList.stream().mapToInt(ProductInformation::getRecommendHomeOrder).sum();

        //System.out.println("求和->"+sum);

        //根据 partNum 分类 再求和
        //第一步根据 partNum 分类
        Map<String, List<ProductInformation>> mapGroups = ListUtils.groupBy(productInformationList, new ListUtils.GroupBy<String, ProductInformation>() {
            @Override
            public String groupBy(ProductInformation row) {
                String partNum = row.getPartNum();
                return partNum;
            }
        });
        //第二步 根据分类的数据求和 
        // 要先遍历 这个分组数据  mapGroups
        Iterator<Map.Entry<String, List<ProductInformation>>> iterator = mapGroups.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<String, List<ProductInformation>> next = iterator.next();
            String key = next.getKey();
            //求和
            List<ProductInformation> productInformations = next.getValue();
            Integer sum = productInformations.stream().mapToInt(ProductInformation::getRecommendHomeOrder).sum();
            System.out.println("分组物料:"+key+"的和为->"+sum);
        }
    }

ListUtils类

在这  https://www.cnblogs.com/znjbbq/p/14506695.html
ProductInformation 这个类无非是一个对象 然后两个属性而已 这边就不贴上具体代码了。

以上是关于对象集合分组然后求和的主要内容,如果未能解决你的问题,请参考以下文章

利用stream对list集合中的bigdecimal进行分组求和,均值,最大值,最小值

Swift 3:对对象数组的分组求和值

Java8 Stream针对List先分组再求和最大值最小值平均值等

使用多列分组,然后使用方法语法对特定列求和

JDK8:Lambda根据 单个字段多个字段,分组求和

Java List<Map>集合根据相同key分组进行某项数据求和