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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:20   1547   0

描述

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

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

最终效果:

实际三个接口查询出来,使用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,"销售排行","产品销售排行榜");

总结

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP