我一直在玩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 -> {});
但这感觉很浪费。
1条答案
按热度按时间yduiuuwa1#
没有这种事。
关于这种功能已经有过讨论,例如在这里,您可以看到这种情况不会发生,以及为什么会发生。
你最好的选择是
forEach(x -> {})
或者你可以自己创建这样一个虚拟消费者,并在任何需要的地方使用它: