Foreach没有击中最后一项

时间:2016-02-08 19:48:43

标签: java foreach

我有一个foreach假设要经过arraylist并在每次项目更改时执行操作。

所以它类似于:

ID | Request
1  |   z
2  |   e

它会向1发送一封电子邮件,说"您有1个请求"。然后发送电子邮件至2"您有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());
        }

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

但是你为什么要做第一个呢?无论如何,foreach不会这样做吗?

如果您尝试这样做:

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

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