JDK 8 Stream流的优美用法——groupingBy结合joining用法
Posted 似水流年,是谁苍白了等待
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
以上是关于JDK 8 Stream流的优美用法——groupingBy结合joining用法的主要内容,如果未能解决你的问题,请参考以下文章