Java Foreach未命中最后一项

Java Foreach未命中最后一项,java,foreach,Java,Foreach,我有一个foreach,假设它在每次项目更改时都要通过和arraylist,并执行一个操作 因此,它的作用类似于: ID | Request 1 | z 2 | e 它会向1发送一封电子邮件,说“您有一个请求”。然后发送电子邮件至2“您有一个请求”,依此类推 当列表中只有两个项目时,我的循环没有处理最后一个项目,我很难找到解决这个问题的优雅方法 Integer managerId = null; Integer previousManagerId = null; if(reques

我有一个
foreach
,假设它在每次项目更改时都要通过和
arraylist
,并执行一个操作

因此,它的作用类似于:

ID | Request
1  |   z
2  |   e
它会向
1
发送一封电子邮件,说“您有一个请求”。然后发送电子邮件至
2
“您有一个请求”,依此类推

当列表中只有两个项目时,我的循环没有处理最后一个项目,我很难找到解决这个问题的优雅方法

Integer managerId = null;
Integer previousManagerId = null;
if(requests != null && requests.size() > 0){
        for(Request request : requests){
            managerId = request.getId();

            if((!managerId.equals(previousId) && previousId != null)){
                e.sendEmail(previousId, numReq.toString());
                numReq = 0;
            }
            numReq++;

            previousId = managerId;

        }
        //Suppose to address the last item. Fails when size == 2
        if((!managerId.equals(previousId) && previousId != null)){
            eusendEmail(previousId, numReq.toString());
        }

循环的最后一条语句确保循环结束后,
previousId
始终等于
managerId
,因此它永远不能进入
if


我认为您总是希望发送最后一封电子邮件,因为您知道至少有一个请求。

循环的最后一条语句确保循环结束后,
previousId
始终等于
managerId
,因此如果
,它永远不能进入


我认为您总是希望发送最后一封电子邮件,因为您知道至少有一个请求。

您必须将以前的ID保存在for each之外,因为每次通过下一个对象时,它都会删除此值;)

但是你为什么要做第一个if呢?foreach不会这么做吗

如果您尝试这样做:

    String managerId = "";
    for(Request request : requests){
        managerId = request.getId();

        if(!managerId.equals(previousId)){
            request.sendEmail(previousId, numReq.toString());
            numReq = 0;
        }
        numReq++;
    }

您必须将previousId保存在for each之外,因为它每次通过下一个对象时都会删除此值;)

但是你为什么要做第一个if呢?foreach不会这么做吗

如果您尝试这样做:

    String managerId = "";
    for(Request request : requests){
        managerId = request.getId();

        if(!managerId.equals(previousId)){
            request.sendEmail(previousId, numReq.toString());
            numReq = 0;
        }
        numReq++;
    }

你说失败是什么意思?有错误吗?哪个版本的Java?如果是Java8,您可以使用streams并消除代码中的大量噪音。@Atri No它将arraylist视为size==1,并完全跳过最后一个。您所说的失败是什么意思?有错误吗?哪个版本的Java?如果Java8,您可以使用流并清除代码周围的大量噪声。@阿特里No它将AARYLIST视为Stase= 1,并且跳过最后一个语句,如果AARYLIST不是空的,则首先考虑IF语句,然后如果它不是空的,则再次确保它是否为空?因为如果arraylist的大小大于0,它就不是空的?!我还以为foreach会自己处理这个问题,如果arraylist是空的,那么就不会有循环,也不会有错误?!我已经在做了<代码>managerId=request.getId()将不起作用。如果AARYLIST不是空的,则IF语句首先考虑,如果它不是空的,则再次确保?因为如果arraylist的大小大于0,它就不是空的?!我还以为foreach会自己处理这个问题,如果arraylist是空的,那么就不会有循环,也不会有错误?!我已经在做了<代码>managerId=request.getId()将无法工作。