Java处理多个List集合中对象数据合并处理数据后为同一个List集合对象

描述

现有三个接口,分别返回相同的列数据,字段名相同但是数据归属业务不同。但最终要的结果是几个集合的所有数据!

(三个接口来源数据并无关联关系,都是互相独立)

最终效果:

实际三个接口查询出来,使用list.addAll()进行拼接:

无法满足业务要求,如下才是满足业务要求:

 

 

对。上代码!

三个list数据接口

//产品
List<ProductSalesVO> productRanking=objectJsonResult.getData().getProductRanking();
//项目
List<ProductSalesVO> projectRanking=objectJsonResult.getData().getProjectRanking();
//套餐
List<ProductSalesVO> packageRanking=objectJsonResult.getData().getPackageRanking();

产品三条

ProductSalesVO{name='分店不享有分店不享有分店不享有分店不', sales=3, totalSalesAmount=36}
ProductSalesVO{name='微肌修护舒缓水', sales=1, totalSalesAmount=100}
ProductSalesVO{name='测试001', sales=1, totalSalesAmount=80}

项目一条
ProductSalesVO{name='不享有折扣不享有折扣不享有折扣1·1', sales=1, totalSalesAmount=235}

套餐一条
ProductSalesVO{name='不享有折扣的套餐', sales=1, totalSalesAmount=300} 

这是最终返回出去的容器↓

//初始化 数据容器
List<ProductSalesRankingExportVO> expList = new ArrayList<>();
public class ProductSalesRankingExportVO implements Serializable {
    private String cpName;
    private Integer cpSales;
    private BigDecimal cpTotalSalesAmount;

    private String xmName;
    private Integer xmSales;
    private BigDecimal xmTotalSalesAmount;

    private String tcName;
    private Integer tcSales;
    private BigDecimal tcTotalSalesAmount;
}

因为三个list数据长度不一样,需要找出最长最大size的list.size,用来进行循环!

//判断三个list集合size 取最大。
int biggest = Math.max(productRanking.size(), projectRanking.size());
biggest = Math.max(biggest, packageRanking.size());

 

        //按照最大的 list size进行遍历取数
        for (int i = 0; i < biggest; i++) {
            ProductSalesRankingExportVO vo = new ProductSalesRankingExportVO();
            //产品list数据
            if(productRanking.size() > i){
                vo.setCpName(productRanking.get(i).getName());
                vo.setCpSales(productRanking.get(i).getSales());
                vo.setCpTotalSalesAmount(productRanking.get(i).getTotalSalesAmount());
            }
            //项目数据
            if(projectRanking.size() > i) {
                vo.setXmName(projectRanking.get(i).getName());
                vo.setXmSales(projectRanking.get(i).getSales());
                vo.setXmTotalSalesAmount(projectRanking.get(i).getTotalSalesAmount());
            }
            //套餐数据
            if(packageRanking.size() > i) {
                vo.setTcName(packageRanking.get(i).getName());
                vo.setTcSales(packageRanking.get(i).getSales());
                vo.setTcTotalSalesAmount(packageRanking.get(i).getTotalSalesAmount());
            }
            expList.add(vo);
        }

 最终的expList数据格式:

ProductSalesRankingExportVO{cpName='分店不享有分店不享有分店不享有分店不', cpSales=3, cpTotalSalesAmount=36, xmName='不享有折扣不享有折扣不享有折扣1·1', xmSales=1, xmTotalSalesAmount=235, tcName='不享有折扣的套餐', tcSales=1, tcTotalSalesAmount=300}
ProductSalesRankingExportVO{cpName='微肌修护舒缓水', cpSales=1, cpTotalSalesAmount=100, xmName='null', xmSales=0, xmTotalSalesAmount=null, tcName='null', tcSales=0, tcTotalSalesAmount=null}
ProductSalesRankingExportVO{cpName='测试001', cpSales=1, cpTotalSalesAmount=80, xmName='null', xmSales=0, xmTotalSalesAmount=null, tcName='null', tcSales=0, tcTotalSalesAmount=null}

                                                                 

        //初始化 数据容器
        List<ProductSalesRankingExportVO> expList = new ArrayList<>();

        //查询排行榜数据
        JsonResult<ProductSalesRankingVO> objectJsonResult = productSalesRankingApi.getProductSalesRanking(token, range, shopId, startMonth, endMonth);
        //产品
        List<ProductSalesVO> productRanking = objectJsonResult.getData().getProductRanking();

        //项目
        List<ProductSalesVO> projectRanking =objectJsonResult.getData().getProjectRanking();

        //套餐
        List<ProductSalesVO> packageRanking =objectJsonResult.getData().getPackageRanking();



        //判断三个list集合size 取最大。
        int biggest = Math.max(productRanking.size(), projectRanking.size());
        biggest = Math.max(biggest, packageRanking.size());


        //按照最大的 list size进行遍历取数
        for (int i = 0; i < biggest; i++) {
            ProductSalesRankingExportVO vo = new ProductSalesRankingExportVO();
            //产品list数据
            if(productRanking.size() > i){
                vo.setCpName(productRanking.get(i).getName());
                vo.setCpSales(productRanking.get(i).getSales());
                vo.setCpTotalSalesAmount(productRanking.get(i).getTotalSalesAmount());
            }
            //项目数据
            if(projectRanking.size() > i) {
                vo.setXmName(projectRanking.get(i).getName());
                vo.setXmSales(projectRanking.get(i).getSales());
                vo.setXmTotalSalesAmount(projectRanking.get(i).getTotalSalesAmount());
            }
            //套餐数据
            if(packageRanking.size() > i) {
                vo.setTcName(packageRanking.get(i).getName());
                vo.setTcSales(packageRanking.get(i).getSales());
                vo.setTcTotalSalesAmount(packageRanking.get(i).getTotalSalesAmount());
            }
            expList.add(vo);
        }

        //执行导出
        ExcelUtils.unifiedExport(HEADERS,expList,"销售排行","产品销售排行榜");

总结

文章写到这,也就结束了,刚开始记录写文难免有不足,欢迎大家批评指正!

 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值