如何在不使用终止语句的情况下终止java流?

mznpcxlj  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(391)

我一直在玩streams,然后我注意到当我执行以下操作时,它不会向控制台生成输出:

String[] is = {"Hello", "World", "My", "Name", "Is", "Jacky"};
Arrays.stream(is).peek(s -> System.out.println(s));

我想这是因为 peek() 是非终止流方法,并且 forEach() 应使用而不是 peek() 要终止流并生成结果:

Arrays.stream(is).forEach(s -> System.out.println(s));

但是,有没有一种方法可以“提前”终止流,使用一个定制的终止方法(函数接口),除了终止流之外什么都不做?。。有没有合适的方法来处理java中已有的内容?
我知道我可以这样做:

Arrays.stream(is).peek(s -> System.out.println(s)).forEach(s -> {});

但这感觉很浪费。

yduiuuwa

yduiuuwa1#

没有这种事。
关于这种功能已经有过讨论,例如在这里,您可以看到这种情况不会发生,以及为什么会发生。
你最好的选择是 forEach(x -> {}) 或者你可以自己创建这样一个虚拟消费者,并在任何需要的地方使用它:

static class Dummies {
     static <T> Consumer<T> getConsumer() {
         return x -> {};
     }
}

相关问题