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()如果不先初始化,代码>将无法工作。