![](/img/trans.png)
[英]How to break out of while loop while continuing to iterate in nested for loop
[英]How to break out of a while loop with a nested forEach loop?
我編寫了一個具有 forEach 循環和 while 循環的代碼,並且我正在嘗試使用 while 循環進行重復請求,直到滿足條件為止。 但是,我無法跳出 while 循環,因為它給出了“中斷外部開關或循環”錯誤。 另外我如何才能進入 forEach 循環中的下一個用戶迭代。
我的代碼:
while(count>0){
usersClient.getUserUUIDList().forEach(user -> {
try{
LOG.info("USER STATUS for user {}",user.getId().toString());
Optional<ExternalUserStatus> userStatus= adminClientFactory.newUssClient().getStatusForUser(orgId, Constants.IMP_ENTITLEMENT,user.getId().toString());
System.out.println(userStatus.toString());
if(userStatus.isPresent()&&(userStatus.get().getState()=="activated")){
//break;
//continue;
}
}
catch(Exception ex){
LOG.info("Exception caught while getting userStatus");
}
});
count--;
Thread.sleep(1000 * 60 *1);
}
而不是 break 或 continue (它們在 lambda 塊中不起作用),而是將計數設置為零:
count = 0;
如果退出循環后需要 count 的值,請使用布爾值作為退出條件:
boolean done = false;
while(count>0){
for (UUID user : usersClient.getUserUUIDList()){
try{
LOG.info("USER STATUS for user {}",user.getId().toString());
Optional<ExternalUserStatus> userStatus=adminClientFactory.newUssClient().getStatusForUser(orgId,Constants.IMP_ENTITLEMENT,user.getId().toString());
System.out.println(userStatus.toString());
done = (userStatus.isPresent() && (userStatus.get().getState()=="activated"))
}
catch(Exception ex){
LOG.info("Exception caught while getting userStatus");
}
});
count--;
if (done) break;
Thread.sleep(1000*60*1);
}
從比爾霍瓦斯的回答中,
done = (userStatus.isPresent() && (userStatus.get().getState()=="activated"))
done
總是從usersClient.getUserUUIDList()
獲取最后一個user
的結果
因此,如果激活,我們可以再使用一次休息時間。
在
for
循環末尾添加
if(done)
break;
最后:
boolean done = false;
while(count>0){
for (UUID user : usersClient.getUserUUIDList()){
try{
LOG.info("USER STATUS for user {}",user.getId().toString());
Optional<ExternalUserStatus> userStatus=adminClientFactory.newUssClient().getStatusForUser(orgId,Constants.IMP_ENTITLEMENT,user.getId().toString());
System.out.println(userStatus.toString());
done = (userStatus.isPresent() && (userStatus.get().getState()=="activated"))
if(done) break;//Add this
}
catch(Exception ex){
LOG.info("Exception caught while getting userStatus");
}
});
count--;
if (done) break;
Thread.sleep(1000*60*1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.