Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代arraylist并通过分组值发送电子邮件_Java_Arrays_Loops_For Loop_Java 8 - Fatal编程技术网

Java 迭代arraylist并通过分组值发送电子邮件

Java 迭代arraylist并通过分组值发送电子邮件,java,arrays,loops,for-loop,java-8,Java,Arrays,Loops,For Loop,Java 8,我有一个数组列表,如下所示 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");

我有一个数组列表,如下所示

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");
ArrayList fList=new ArrayList();
文件补充(“100510-0001”);
文件补充(“100510-0001”);
文件补充(“100513-0004”);
文件补充(“100510-0002”);
文件补充(“100510-0001”);
文件补充(“100513-0005”);
文件补充(“100513-0006”);
文件补充(“100518-0006”);
文件补充(“100599-0001”);
文件补充(“100593-0009”);
我需要根据列表值的前6个字符发送电子邮件

例如: 我在列表中重复了4次100510,所以我需要在同一封电子邮件中发送所有4条记录,如下面的硬编码一条

我有3次100513,我可以有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);
        }
    }
ArrayList子列表=新建ArrayList();
对于(int i=0;i
您可以对原始列表进行排序,收集子列表直到第一部分更改,然后每次第一部分更改时发送子列表

Collections.sort(fList);
String lastPart1 = null;
List<String> subList = null;
for (int i = 0; i < fList.size(); i++) {
   String strPart1 =  fList.get( i ).split("-")[0];
   String strPart2 =  fList.get( i ).split("-")[1];
    if( !strPart1.equals(lastPart1) ){
         if(subList!=null){ //Send the last collected subList
             createEmail( lastPart1, subList );
         }
         subList = new ArrayList<>();
         subList.add (strPart2);
         lastPart1 = strPart1;

    }else{
         subList.add (strPart2);
    }
}
Collections.sort(fList);
字符串lastPart1=null;
列表子列表=空;
对于(int i=0;i
如果您只需要每个“前缀”发送一封电子邮件,那么您只需分组:

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);
});
Map distinctMap=fList.stream()
.collect(收集器.groupingBy(s->s.split(“-”[0]));
distinctMap.forEach((str1,列表)->{
System.out.println(“发送前缀为“+str1”的电子邮件);
创建电子邮件(列表);
});
当然,您可以使用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());
}
Map emailsByPrefix=newhashmap();
对于(int i=0;i{
列表合并=新建ArrayList();
合并。添加全部(列表1);
合并。添加全部(列表2);
返回合并;
});
}
对于(条目emailEntry:emailsByPrefix.entrySet()){
System.out.println(“为前缀发送电子邮件”+emailEntry.getKey());
createEmail(emailEntry.getValue());
}

@ScaryWombat这个问题有两个部分:(1)字符串比较(2)多重映射。你怎么能说它是重复的:(你们有一个清理和组织问题的议程。但是,不惜任何代价吗?
子字符串
在哪里使用?为什么两个
如果
s而不是一个带有
|
?这个问题可能是错误的,应该结束。但是“作为XYZ的副本结束”也不太好:)@泰迪-发一封回信谢谢你这是我真正需要的。我已经使用了地图解决方案。谢谢,但我不需要检查第2部分。