for循环和foreach可以使用break指令。而是Java8消费者。
beans.forEach(v->{
if (v.id != 100){
//break or continue
}
v.doSomeThing();
});
在Java8中摆脱helper方法会很好,但是如果您真的需要在循环中中断(过滤或设置限制,如@assylias所建议的,是避免这种情况的方法),那么只需编写一个helper方法:
public static <T> void forEach(Iterable<T> iterable, Function<T, Boolean> f)
{
for (T item : iterable)
{
if (!f.apply(item))
{
break;
}
}
}
然后可以这样使用这个辅助方法:
List<Integer> integers = Arrays.asList(1, 2, 3, 4);
forEach(
integers,
(i) -> {
System.out.println(i);
return i < 2;
}
);
打印内容:
1
2
对于Streams,应独立查看每个元素,或尽可能不了解Stream中的其他项目;这部分是因为可以使用并行流。引用Stream JavaDoc:
流管道可以顺序执行,也可以并行执行。此执行模式是流的属性。创建流时,可以选择顺序执行或并行执行。(例如,Collection#stream()创建一个顺序流,而Collection#parallelStream()创建了一个并行流。)执行模式的选择可以通过Stream#sequential()或Stream#parallel()方法进行修改,也可以使用Stream#isParallel(。
因此,在并行流中使用block
可能会产生不可预见的后果。
如果您希望能够< code>break或过滤流以便不需要< code>break,最好的方法可能是使用传统的< code>for循环。或者也许你必须完全重新思考你的逻辑,因为流提供了相当多的新的可能性。