簡體   English   中英

如何使用嵌套的 forEach 循環跳出 while 循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM