stream对bean中多个项目进行分组合计的两种实现方式

Posted on 2020-02-29 09:13  wzhw2015  阅读(682)  评论(0编辑  收藏  举报

1.一个一个项目的分组合计

list.stream().collect(

                                Collectors..groupingBy(

                                                                      Bean::getItemA

                                                                     ,Collectors..groupingBy(

                                                                                                            Bean::getItemB,

                                                                                                            Collectors..reducing(

                                                                                                                                             new Bean(),

                                                                                                                                             (oldBean,newBean) -> {

                                                                                                                                                                                  Bean oldBeanA = (Bean)oldBean;

                                                                                                                                                                                  Bean newBeanA = (Bean)newBean;

                                                                                                                                                                                  if (StringUtils.isEmpty(oldBeanA .getItemA())) {

                                                                                                                                                                                                                                                              return newBeanA;

                                                                                                                                                                                                                                                            }

                                                                                                                                                                                  oldBeanA.setItemC(oldBeanA.getItemC()+newBeanA.getItemC());

                                                                                                                                                                                  oldBeanA.setItemD(oldBeanA.getItemD()+newBeanA.getItemD());

                                                                                                                                                                                  return oldBeanA;

                                                                                                                                                                                  }

                                                                                                                                            )

                                                                                                           )

                                                                    )

                              )

 

2.利用复合Key实现多项目分组合计

list.stream().collect(

                               Collectors.groupingBy(

                                                                   bean -> bean.getItemA() + bean.getItemB(),

                                                                   Collectors.reducing(内容与上面的处理相同)

                                                                   )

                              )

Copyright © 2024 wzhw2015
Powered by .NET 9.0 on Kubernetes