如何在xtend中打破foreach循环?

时间:2016-09-27 14:22:00

标签: xtend

我有以下代码:即使我不想要它,也会迭代arrayList直到结束。我不知道如何打破它,因为xtend没有break语句。如果我不能将相同的转换为while循环,xtend中是否有类似于break语句的替代方法?

arrayList.forEach [ listElement | if (statusFlag){
     if(monitor.canceled){
          statusFlag = Status.CANCEL_STATUS
          return
     }
     else{
          //do some stuff with listElement
     }      
}]

3 个答案:

答案 0 :(得分:3)

你可以尝试类似的东西

arrayList.takeWhile[!monitor.cancelled].forEach[ ... do stuff ...]
if ( monitor.cancelled ) { statusFlag = Status.CANCEL_STATUS }

takeWhile是懒惰地执行的,所以它应该按预期工作并在正确的时刻中断(内存可见性允许,我希望monitor.cancelled是易失性的。)

不确定状态标志如何在此处显示,您可能需要在一个或两个闭包中添加检查。

答案 1 :(得分:2)

您是对的,Xtend不支持breakcontinue

因为您似乎希望根据外部条件“破解”(因此您无法使用例如过滤),我认为抛出异常并不是一个糟糕的选择。

伪代码:

try {
    arrayList.forEach[
        if (monitor.canceled) {
            throw new InterruptedException()
        }
        else {
            // Continue processing
        }
    ]
}
catch (InterruptedException e) {
    // Handle
}

答案 2 :(得分:0)

您是正确的,Xtend不支持中断并继续。 将特定于中断的功能移至Java并在xtend中使用。