首页 > 其他分享 >动态金额 jsonArray 计算

动态金额 jsonArray 计算

时间:2023-10-28 12:13:48浏览次数:36  
标签:info newCostInfo jsonArray 金额 value CostInfo totalCostInfo key 动态

动态金额 jsonArray 计算

数据格式 [{"name": "福利卡券", "type": "WELFARE_CARD_COUPON", "useNum": 0.01}, {"name": "现金", "type": "CASH", "useNum": 12.26}]

相加
/**
 * costinfo 运算相加
 *
 * @param totalCostInfo
 * @param costInfo
 * @return
 */
private List<CostInfo> addCostInfo(List<CostInfo> totalCostInfo, List<CostInfo> costInfo) {

    if (CollectionUtils.isEmpty(costInfo)) {
        return totalCostInfo;
    }

    Map<String, CostInfo> costInfoTOMap = totalCostInfo
            .stream()
            .collect(Collectors.toMap(e -> e.getType(), t -> t));

    Map<String, CostInfo> costInfoMap = costInfo
            .stream()
            .collect(Collectors.toMap(e -> e.getType(), t -> t));

    Map<String, CostInfo> newMap = new HashMap<>();
    for (Map.Entry<String, CostInfo> entry : costInfoTOMap.entrySet()) {
        String key = entry.getKey();
        CostInfo existCostInfo = costInfoMap.get(key);
        // 存在
        CostInfo newCostInfo = new CostInfo();
        CostInfo value = entry.getValue();
        if (null != existCostInfo) {
            newCostInfo.setName(value.getName());
            newCostInfo.setType(key);
            newCostInfo.setUseNum(NumberUtil.add(value.getUseNum(), existCostInfo.getUseNum()));
        } else {
            newCostInfo.setName(value.getName());
            newCostInfo.setType(key);
            newCostInfo.setUseNum(value.getUseNum());
        }
        newMap.put(key, newCostInfo);
    }

    for (Map.Entry<String, CostInfo> entry : costInfoMap.entrySet()) {
        String key = entry.getKey();
        CostInfo value = entry.getValue();
        CostInfo info = newMap.get(key);
        if (null == info) {
            CostInfo newCostInfo = new CostInfo();
            newCostInfo.setName(value.getName());
            newCostInfo.setType(key);
            newCostInfo.setUseNum(value.getUseNum());
            newMap.put(key, newCostInfo);
        }
    }

    List<CostInfo> costInfoTOList = new ArrayList<>();
    // 保证顺序
    totalCostInfo.forEach(e -> {
        CostInfo info = newMap.get(e.getType());
        if (null == info) {
            costInfoTOList.add(e);
        } else {
            costInfoTOList.add(info);
        }
    });
    Map<String, CostInfo> costInfoTOListMap = costInfoTOList
            .stream()
            .collect(Collectors.toMap(e -> e.getType(), t -> t));
    newMap.forEach((key, value) -> {
        CostInfo info = costInfoTOListMap.get(key);
        // 补全之前 没有加入的
        if (null == info) {
            costInfoTOList.add(value);
        }
    });
    return costInfoTOList;
}
相减
 /**
     * costinfo 运算相减
     *
     * @param totalCostInfo 总的
     * @param costInfo      被减数
     * @return
     */
    private List<CostInfo> subCostInfo(List<CostInfo> totalCostInfo, List<CostInfo> costInfo) {

        if (CollectionUtils.isEmpty(totalCostInfo) || CollectionUtils.isEmpty(costInfo)) {
            return totalCostInfo;
        }

        Map<String, CostInfo> costInfoTOMap = totalCostInfo
                .stream()
                .collect(Collectors.toMap(e -> e.getType(), t -> t));

        Map<String, CostInfo> costInfoMap = costInfo
                .stream()
                .collect(Collectors.toMap(e -> e.getType(), t -> t));

        Map<String, CostInfo> newMap = new HashMap<>();
        for (Map.Entry<String, CostInfo> entry : costInfoTOMap.entrySet()) {
            String key = entry.getKey();
            CostInfo existCostInfo = costInfoMap.get(key);
            // 存在
            if (null != existCostInfo) {
                CostInfo value = entry.getValue();
                CostInfo newCostInfo = new CostInfo();
                newCostInfo.setName(value.getName());
                newCostInfo.setType(key);
                newCostInfo.setUseNum(NumberUtil.sub(value.getUseNum(), existCostInfo.getUseNum()));
                newMap.put(key, newCostInfo);
            }
        }
        List<CostInfo> costInfoTOList = new ArrayList<>();
        // 保证顺序
        totalCostInfo.forEach(e -> {
            CostInfo info = newMap.get(e.getType());
            if (null == info) {
                costInfoTOList.add(e);
            } else {
                costInfoTOList.add(info);
            }

        });
        return costInfoTOList;
    }

总结 : 一giao 我滴 giao ,这种格式的数据计算 有点小麻烦

标签:info,newCostInfo,jsonArray,金额,value,CostInfo,totalCostInfo,key,动态
From: https://www.cnblogs.com/lyc88/p/17793936.html

相关文章

  • Angular 动态导入和懒加载的深入介绍
    动态导入,这是一种用于实现懒加载和代码分割的技术,但需要注意的是,它只能在主应用程序中使用。在现代的前端开发中,性能和用户体验一直是至关重要的考虑因素。随着应用程序变得越来越复杂,加载时间的优化变得尤为关键。动态导入是一项强大的技术,可以帮助我们在Angular应用程序中实现......
  • 实现动态大数结构
      大数结构是一种常见的数据结构,在C++当中,我们常用vector来动态实现。除此之外,我们也可以仿照vector的思路,自己实现内存的动态分配,当内存容量达到上限时,用C-apirealloc进行内存的重新分配。#defineREQUIRE2(p,q)assert((p)||(q))#defineREQUIRE1(p)assert(p)#define......
  • python基于动态数量个列表求笛卡尔积
    需求有N个list,分别是listA,listB,listC。。。等等,N的数量不确定,现在对这些list的所有可能组合的值求笛卡尔积,比如(listA,listB),(listA,listC),(listB,listC),(listA,listB,listC)。。。求这里每个组合的笛卡尔积。分析对实现以上需求,可分解为2个部分:1.求所有list的组合2.对所......
  • delphi 运行时动态设置控件(类)属性值
    运行时动态设置控件(类)属性值代码运行时根据控件名称设置Alignment属性值usesSystem.Rtti;procedureTForm1.Button1Click(Sender:TObject);varvComponent:TComponent;vRttiCtx:TRttiContext;vRType:TRttiType;vProp:TRttiProperty;v:TValue;begin......
  • 动态规划合集
    动态规划笔记目录八种常见动态规划题型序列dp树形dp背包dp区间dp期望dp状态压缩dp数位dp计数dp动态规划优化合集DP技巧与DP杂题数据结构优化dp矩阵快速幂优化dp决策单调性优化dp斜率优化dp......
  • wpf webview2动态修改下载文件的下载路径 文件下载路径选择
    通过webview2下载文件时候会将文件保存在用户的默认下载目录,如果想调整成通过弹窗选择下载路径的方式则需要将默认行为做出修改。本文通过CoreWebView2_DownloadStarting这个事件来调整下载路径,基本思路为通过弹窗让用户选择需要保存的路径,如果用户取消了此操作则通过这个事件......
  • ChatGPT 实用小案例分享——使用Python重命名附件和统计发票合计金额
    大家好,我是皮皮。一、前言前几天在【志军】的星球看到了一个有意思的ChatGPT分享,正好喝Python相关的,一起来看看吧。ChatGPT实用小案例分享。如果你在高德或者滴滴上申请过开票,应该知道它们会给我们发一封邮件,发票和行程单都会放在附件中。由于高德是聚合平台,背后有很多网约车平台,......
  • 反射&动态代理
    1.反射1.1反射的概述:专业的解释(了解一下):是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。通俗的理解:(掌握)利用反射创建的对象可以无视修饰......
  • Unity RVO动态避障技术方案介绍
    我们在开发游戏的时候经常会遇到这样的问题,当我们寻路的时候,其它人也在寻路,如何避免不从其它人的位置穿过。这个叫做动态避障,目前主流的解决方案就是RVO。本节我们来介绍一些Unity实现RVO的相关资料,后续在详细的讲解ROV算法的原理。先給大家介绍一个RVO2Library的项目,这个项......
  • php 金额格式胡
    //转换不彻底functionExchangeMoney($N_money){$A_tmp=explode(".",$N_money);//将数字按小数点分成两部分,并存入数组$A_tmp$I_len=strlen($A_tmp[0]);//测出小数点前面位数的宽度if($I_len%3==0){$I_step=$I_len/3;//如前面位数的宽度mod3=0,可按,......