TakeWhile与Filter有何不同?区别例

2022-09-01 04:58:20

takeWhile() 与 Java 9 中的 filter() 有何不同。它有什么额外的效用?

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

这也许就是以下几点要做的

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

那么这个新功能的需求是什么呢?


答案 1

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);

将打印

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);

将打印

123


答案 2

区别

采取同时

在筛选器为 true 时获取值,然后停止

滤波器

获取与筛选器匹配的所有值

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

用户界面。

这将输出从 2 到 10(包括 2 和 10)的所有偶数。

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

用户界面。

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


推荐