利用 Map 集合的 containsKey 方法,实现对象数组的去重以及重复对象的字段值累加

1. 前言

公司的项目又加了一个新需求,打印发票增加详细收费方式以及每种收费收费金额。一开始没把它当回事,想着服务端返回的支付信息里包含着各种支付记录,在打印模块里将接收到的支付信息 List 遍历一下,然后打印出来就好了。

后来做的时候发现,是我想得简单了。

因为服务端返回的支付信息是按照每笔交易记录返回的,即如果支付总额为20元,如果使用者支付了两次10元完成的支付,那么服务端存储的这笔交易的支付信息就为两次10元的支付记录。具体返回的 json 串示例如下:

    "***INFOS\": [
        {
            \"***NAME\": \"现金收费\",
            \"***ACCOUNT\": \"7.0\",
            \"***NUM\": \"1000000576\"
        },
        {
            \"***NAME\": \"现金收费\",
            \"***ACCOUNT\": \"3.0\",
            \"***NUM\": \"1000000576\"
        },
        {
            \"***NAME\": \"现金收费\",
            \"***ACCOUNT\": \"5.0\",
            \"***NUM\": \"1000000576\"
        },
        {
            \"***NAME\": \"微信收费\",
            \"***ACCOUNT\": \"15.0\",
            \"***NUM\": \"1000000576\"
        },
        {
            \"***NAME\": \"微信收费\",
            \"***ACCOUNT\": \"8.0\",
            \"***NUM\": \"1000000576\"
        }
    ]

可以看到,此次交易总额为38元,然后使用者分了5次完成的支付。如果我什么也不处理就开始遍历打印的话,打出的发票信息上显示的详细支付信息就是3条现金支付记录,和2条微信支付记录,只是钱数不同而已。这样是肯定不行的,所以这里要处理一下数据。

2. 思路

思路其实很简单,就是把 List 中的相同支付方式去重,然后将每笔支付金额相加,得出的总额算作是这种支付方式的支付钱数。即前文中那笔示例交易,处理后应该为:

    "***INFOS\": [
        {
            \"***NAME\": \"现金收费\",
            \"***ACCOUNT\": \"15.0\",
            \"***NUM\": \"1000000576\"
        },
        {
            \"***NAME\": \"微信收费\",
            \"***ACCOUNT\": \"23.0\",
            \"***NUM\": \"1000000576\"
        }
    ]

好了,思路清晰了,就去完成它吧。

3. 实现

实现的部分在新建的示例工程中完成。

创建一个实体类对象:

    public class Person {
   

        private<
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值