记一次使用Stream流flatMap合并两个List

记一次工作中用到的 flatMap 流合并两个List,并生成一个新List的操作:
这里为什么用到了 flatMap 。是因为我在查SQL的时候,设涉及到的筛选条件(时间维度不同)不同才去用的 Stream 流的 flatMap 。具体怎么写看个人,大概有两种方式嘛,一是:写SQL子查询(公司要求尽量少些子查询和联表查询,就没用这种方法);二是:就这篇文章讲的 Stream 流的 flatMap 流的扁平化处理。如果还有其他的希望大佬指点指点;
注: 涉及到敏感数据我用 “****” 来替代了.
不多说直接上代码(就直接展示是业务层的代码);


        //第一个list结果集
        List<TStDk> tStDkList = tStDkDubboService.selectTstDkTrendReportList(tStDk);
        
        // 第二个list结果集
        List<TStDk> dkList = tStDkDubboService.selectDkList(tStDk);

        /**
        *组装 两个list的数据,成一个list结果集,我这里新封装结果集的一个Vo类;
        */
        List<TStDkVo> tStDkVoList = null;
            tStDkVoList = tStDkList.stream()
                // 对两个List做扁平化处理
                .flatMap(v -> dkList.stream()
                // 过滤出来符合自己想要的数据
                .filter(m -> v.getJydm().equals(m.getJydm()))
                 /**
                 * 这里面用到了前面封装Vo类的构造方法new TStDkVo(......),
                 * 按我想要的数据格式进行返回
                 *  
                 /
                .map(n -> new TStDkVo(v.getJydm(), v.getAmount(), v.getNum(), n.getAccountNum(),
                		v.getAreaName(),v.getAreaCode())))
                .collect(Collectors.toList());
        }

这里看一下两个List的查询结果和封装之后的结果

第一个 List 查询结果:

{
    "code": 1000,
    "result": [
        {
            "jydm": "1376",
            "amount": 16585.46,
            "num": 297,
            "areaCode": "******"
        },
        {
            "jydm": "1376",
            "amount": 230.39,
            "num": 166,
            "areaCode": "*******"
        },
        ..............
        ]
}

第二个 List 查询结果:

{
    "code": 1000,
    "result": [
        {
            "jydm": "****",
            "areaName": "******",
            "accountNum": 143,
            "areaCode": "*******"
        },
        {
            "jydm": "******",
            "areaName": "******",
            "accountNum": 90,
            "areaCode": "******"
        },
        ..............
        ]
}

可以看到两个List查询结果里面的属性值是有不一样的地方,下面可以看一下我们封装之后的 List 结果集是怎样的;
封装之后的返回数据:

{
    "code": 1000,
    "result": [
        {
            "accountNum": 143,
            "jydm": "1376",
            "amount": 16585.46,
            "num": 297,
            "areaName": "*****",
            "areaCode": "*******"
        },
        {
            "accountNum": 0,
            "jydm": "1376",
            "amount": 230.39,
            "num": 166,
            "areaName": "*******",
            "areaCode": "********"
        },
        ..........
        ]
}

这样就通过 flatMap 和其他的一些操作就将两个 List 进行了合并 ,得到了我想要的结果;
flatMap(对流扁平化处理):
使用flatMap方法的效果是,各个数组并不是分别映射一个流,而是映射成流的内容,所有使用map(Array::stream)时生成的单个流被合并起来,即扁平化为一个流。
个人理解,就是将两个不同的List1、List2,使用flatMap时,合并成一个新的List;

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落榜书生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值