java - 迭代arraylist并通过分组值发送电子邮件
问题描述
我有一个如下所示的 ArrayList
ArrayList<String> fList = new ArrayList<>();
fList.add("100510-0001");
fList.add("100510-0001");
fList.add("100513-0004");
fList.add("100510-0002");
fList.add("100510-0001");
fList.add("100513-0005");
fList.add("100513-0006");
fList.add("100518-0006");
fList.add("100599-0001");
fList.add("100593-0009");
我需要根据列表值的前 6 个字符发送电子邮件。
示例:我在列表中重复了 4 次 100510,所以我需要在同一封电子邮件中发送所有 4 条记录,如下面的硬编码之一。
我有 100513 3 次,我可以有 n 个列表,但我需要进行递归/迭代并发送具有相同记录的电子邮件,即 100510 在单独的电子邮件中,100513 在单独的电子邮件中等等......
有什么帮助吗?
ArrayList<String> subList = new ArrayList<>();
for (int i = 0; i < fList.size(); i++) {
String subString = fList.get(0).split("-")[0];
if(fList.get(i) == "100510"){
subList.add(fList.get(i));
createEmail(subList);
}
if(fList.get(i) == "100513"){
subList.add(fList.get(i));
createEmail(subList);
}
}
解决方案
如果您只需要为每个“前缀”发送一封电子邮件,那么您需要做的就是分组:
Map<String, List<String>> distinctMap = fList.stream()
.collect(Collectors.groupingBy(s -> s.split("-")[0]));
distinctMap.forEach((str1, list) -> {
System.out.println("Sending e-mail for prefix " + str1);
createEmail(list);
});
当然你可以使用你的 for 循环来做到这一点,但你应该只在所有迭代之后发送电子邮件:
Map<String, List<String>> emailsByPrefix = new HashMap<>();
for (int i = 0; i < fList.size(); i++) {
String subString = fList.get(i).split("-")[0];
emailsByPrefix.merge(subString, Arrays.asList(fList.get(i)), (list1, list2) -> {
List<String> merged = new ArrayList<>();
merged.addAll(list1);
merged.addAll(list2);
return merged;
});
}
for (Entry<String, List<String>> emailEntry : emailsByPrefix.entrySet()) {
System.out.println("Sending e-mail for prefix " + emailEntry.getKey());
createEmail(emailEntry.getValue());
}
推荐阅读
- javascript - 将服装快捷操作添加到 Tampermonkey 脚本中
- php - 带有 mysql 的 php:导入 .csv 分隔空间
- python - 最小路径总和中的 UnboundLocalError
- typescript - 如何在 TypeScript 构建中包含整个文件夹?
- angular - TS2564 属性 mapViewEl 没有初始化器
- python-3.x - 绘制多个同心三角形和极坐标图,圆圈内的圆圈
- assembly - NASM 简单引导加载程序不会使用 INT 13H 加载扇区
- node.js - 复制失败:尝试在 DigitalOcean Droplet 上的 Docker 中复制 package.json 文件时的状态
- flask - discord-oauth 和烧瓶(夸脱)set-cookie 失败
- c# - UWP: 0x80131040: 定位程序集的清单定义与程序集引用不匹配