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

一,业务需求

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

二、步骤

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

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

三、代码实现

 //按电话号码分组,每个人只发生一条提醒短信
Map> collect = unEsigList.stream().collect(Collectors.groupingBy(EsigContractRecord::getMobile));
collect.forEach((k, v) -> {
String names = ((List) 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);

你可能感兴趣的:(Java,java8)