for循环和foreach可以使用break指令。但是Java8 Consumer。
beans.forEach(v->{
if (v.id != 100){
//break or continue
}
v.doSomeThing();
});
答案 0 :(得分:1)
离开Java 8中的辅助方法会很好,但是如果你真的需要打破一个循环(过滤或设置限制为@assylias建议,是避免这种情况的方法)那么只需写一个辅助方法:
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
答案 1 :(得分:0)
使用Streams,每个元素都应该独立查看,或者尽可能少地查看Stream中的其他项目;这部分是因为使用并行Streams的可能性。来自Stream JavaDoc的引用:
流管道可以顺序执行,也可以并行执行。这个 执行模式是流的属性。流已创建 初始选择顺序或并行执行。 (例如, Collection#stream()创建一个顺序流, 和 Collection#parallelStream()创建 并行的。)这种执行模式的选择可以通过修改 Stream#sequential()或 Stream#parallel()方法,可以查询 Stream#isParallel()方法。
因此,在并行Stream中使用break
可能会产生无法预料的后果。
如果您希望能够for
或过滤流以便不需要break
,那么最好的想法可能是使用传统的break
循环。或者你可能必须完全重新思考你的逻辑,因为Streams提供了很多新的可能性。