提问者:小点点

java 8 java.util.function。消费者Rest[重复]


for循环和foreach可以使用break指令。而是Java8消费者。

beans.forEach(v->{
    if (v.id != 100){
        //break or continue
    }
    v.doSomeThing();
});

共2个答案

匿名用户

在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循环。或者也许你必须完全重新思考你的逻辑,因为流提供了相当多的新的可能性。