JDK 8 Stream流的优美用法——groupingBy结合joining用法

一,业务需求

由于业务原因需要给客户在截止日期内发送提醒短信,某个客户可能有多条数据需要提醒,那么如果给客户发送多条短信可能会有所抵触,那么为了将多条数据和成一条发送,这就需要用到jdk8 的特性steam流能简单的实现了。

二、步骤

1.将所有数据以唯一标识一个人的字段分组,我这里需要发送短信,就以电话号码分组,并转换成map格式,key为电话号码,value为这个电话号码所对应的所有数据,为一个集合,所以最终类型为Map<String ,List<T>>形式的

2.将value中所对应的某个需要发送的字段进行拼接,我这里需要list中的“合同名称”名称做个拼接,以短信内容发送给客户;

三、代码实现

 //按电话号码分组,每个人只发生一条提醒短信
Map<String, List<EsigContractRecord>> collect = unEsigList.stream().collect(Collectors.groupingBy(EsigContractRecord::getMobile));
collect.forEach((k, v) -> {
String names = ((List<EsigContractRecord>) v).stream().map(m -> m.getContractName()).collect(Collectors.joining(","));
String dateTime = v.stream().map(m -> m.getExpireDate()).collect(Collectors.joining(","));
String userName = v.get(0).getUserName();
//发送短信
String smsContent = "尊敬的" + userName + "先生/女士,您好,请签署" + names + ",签约截止至" + dateTime + ",请前往微信搜索栏输入“XXX”小程序,登录后查看协议并签署。如有疑问请联系客户经理,祝您工作顺利!";
logger.info("==============截至日期提醒短信开始发送", smsContent);
smsRecordService.sendSmsRemind(k, smsContent);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值