stream流处理数据(问题记录)

一个List 类型的列表。MemberCheck中有个变量type是重复的,但是不知道重复的次数等。就把重复的这个变量type(Byte)类型在list中提取出来,放入map中当做key,type一样的放入列表中。这样,可以优化速度。

Map<Byte, List<MemberCheck>> map = exportList.stream().collect(Collectors.groupingBy(MemberCheck::getType));

得到的结果是
{1=[MemberCheck(id=12090, applyId=2013, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:51 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:51 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12089, applyId=2007, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:47 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:47 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12087, applyId=2011, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:37 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:37 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12086, applyId=2010, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:33 CST 2020, status=5, type=1, checkAuthor=test4, checkTime=Tue Oct 13 16:05:33 CST 2020, delFlag=0, receipt=null)],
2=[MemberCheck(id=12124, applyId=1010, memberCode=3344, memberName=s, createTime=Wed Oct 14 15:08:50 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Wed Oct 14 15:08:50 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12123, applyId=1011, memberCode=3344, memberName=s, createTime=Wed Oct 14 15:08:46 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Wed Oct 14 15:08:46 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12094, applyId=1005, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:06:10 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Tue Oct 13 16:06:10 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12092, applyId=1007, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:06:01 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Tue Oct 13 16:06:01 CST 2020, delFlag=0, receipt=null), MemberCheck(id=12085, applyId=1006, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:05:28 CST 2020, status=5, type=2, checkAuthor=test4, checkTime=Tue Oct 13 16:05:28 CST 2020, delFlag=0, receipt=null)],
3=[MemberCheck(id=12093, applyId=4, memberCode=1232, memberName=1233456, createTime=Tue Oct 13 16:06:05 CST 2020, status=5, type=3, checkAuthor=test4, checkTime=Tue Oct 13 16:06:05 CST 2020, delFlag=0, receipt=null)]}
##################################################
根据type的不同,去不同的数据表进行查询。
这样做因为一对多的关系,一张审核表对于多个申请表,你拿到多条审核数据,需要根据数据去不同的申请表中取对应的其他数据。这样可以避免每一条审核数据都要和申请数据进行一次交互。如果有十条审核数据,需要一共查询十次。这样处理之后,只需要查三次就可以了。然后把type对应的value列表,直接传入mybatis,在mybatis中进行遍历取值即可。
比如,我想要拿到三张申请表中主键ID和审核表applyId对应的所有数据。需要进行上述处理之后,把type对应的value,传入对应的表中。

map.get(1)

这样就取出map中key为1的列表。传入mybatis中之后

SELECT
   ...
FROM
	A a //审核表 一对多中的一
	LEFT JOIN B b //申请表 一对多中的多
	on a.apply_id = b.id
WHERE
	b.id in
    <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
      #{item.applyId}
    </foreach>

在持久层参数前添加parme

    List<ResultExport> getResultExport(@Param("list") List list);

这样就可以把列表中实体内的所有applyId提取出来,放入()中,以逗号隔开。

遇到的第二个问题,前端传入一个list,后台需要进行处理,根据list中实体的其中一个字段进行排序。(String可以直接排序,先空字符,然后数字,然后字母)。

//根据实体中的memberCode值进行顺序排列,生成个新的list
list = list.stream().sorted(Comparator.comparing(ResultExport::getMemberCode)).collect(Collectors.toList());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值