首页 > 解决方案 > Java:流中的消费者接口无法按预期工作

问题描述

我有 2 条语句,我希望它们应该“打印”相同的结果:

Arrays.stream("abc".split("")).forEach(System.out::println);//first
Arrays.stream("abc".split("")).peek(new Consumer<String>() {//second
    @Override
    public void accept(String s) {
        System.out.println(s);//breakpoint
    }
});

事实上,第一条语句将打印

a
b
c

好的,但是第二条语句什么也没打印。我试图在 IntelliJ 内的“//断点”行中设置一个断点,但没有命中。

那么我应该如何更改第二条语句以使用“peek”,因为它在使用“Consumer”处理每个元素时创建一个新流?

非常感谢。

标签: javajava-8java-streamconsumerpeek

解决方案


peek()不是终端操作,您需要添加任何终端操作才能使 peek 工作,例如

Arrays.stream("abc".split("")).peek(new Consumer<String>() { //second
    @Override
    public void accept(String s) {
        System.out.println(s);//breakpoint
    }
}).count();

推荐阅读