【问题标题】:Java 8 Stream - Why is filter method not executing? [duplicate]Java 8 Stream - 为什么过滤器方法不执行? [复制]
【发布时间】:2017-04-13 06:33:48
【问题描述】:

我正在学习使用 java 流进行过滤。 但是过滤后的流没有打印任何东西。 我认为过滤器方法没有被执行。 我的过滤代码如下:

Stream.of("d2", "a2", "b1", "b3", "c")
    .filter(s -> {
        s.startsWith("b");
        System.out.println("filter: " + s);
        return true;
    });

没有编译错误,也没有异常。 有什么建议吗?

【问题讨论】:

    标签: java filter java-8 stream java-stream


    【解决方案1】:

    filter是中间操作,只有Stream流水线以终端操作结束时才会执行。

    例如:

    Stream.of("d2", "a2", "b1", "b3", "c")
      .filter(s -> {
            s.startsWith("b");
            System.out.println("filter: " + s);
            return true;
      })
      .forEach (System.out::println);
    

    事实上,您的过滤方法是无用的,因为它总是返回true,因此不执行过滤。

    【讨论】:

    • 需要终端操作的正确答案,谢谢。但它总是返回 true 的事实并不能阻止它执行。
    • @DovevHefetz 我从来没有说过“它总是返回 true 的事实阻止它执行”。最后一句只是观察到这个过滤器是没有意义的,因为所有元素都通过了。
    猜你喜欢
    • 2016-10-31
    • 2017-04-13
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多