怎么跟过滤器有什么不同?

Raj*_*jan 12 java java-stream java-9

takeWhile()与Java 9中的filter()有何不同.它有什么额外的实用程序?

Stream.of(1,2,3,4,5,6,7,8,9,10).filter(i -> i < 4 )
        .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

这可能是以下会做的

Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i < 4 )
        .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

那么这个新功能需要什么呢?

Old*_*eon 19

filter 将从流中删除不满足条件的所有项目.

takeWhile 将在第一次出现不满足条件的项目时中止流.

例如

Stream.of(1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1)
    .filter(i -> i < 4 )
    .forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

将打印

123321

Stream.of(1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1)
    .takeWhile(i -> i < 4 )
    .forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

将打印

123


jrt*_*ell 9

区别

边走边看

在过滤器为真时取值,然后停止

筛选

获取与过滤器匹配的所有值

例子

Stream.of(1,2,3,4,5,6,7,8,9,10).filter(i -> i % 2 == 0 )
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

钛白粉

这将输出从 2 到 10 的所有偶数。

Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i % 2 == 0 )
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

钛白粉

这不输出任何内容,因为 1 不是偶数,因此它在输出任何内容之前停止。