在Java 9 使用 takeWhile() 和 dropWhile() 方法限制流

新方法 takeWhiledropWhile允许我们根据谓词获取流的一部分。
这里的流可以是有序的或者无序的,所以:

  • 在有序流上,takeWhile返回从流中获取的与给定谓词匹配的元素的“最长前缀”,从流的开头开始。
  • 在无序流上,takeWhile返回与给定谓词(但不是全部)匹配的流元素的子集,从流的开头开始。

dropWhile方法与 takeWhile方法相反。

  • 在有序流上,dropWhile返回匹配给定谓词的“最长前缀”之后的剩余项目。
  • 在无序流上,dropWhile在删除与给定谓词匹配的元素子集后返回剩余的流元素。

takeWhile 和 dropWhile 示例

在这个例子中,我们有从“a”到“i”的字符列表。
我想要在迭代中可能出现在 char 'd' 之前的所有字符。

List<String> alphabets = List.of("a", "b", "c", "d", "e", "f", "g", "h", "i");
List<String> subset1 = alphabets
        .stream()
        .takeWhile(s -> !s.equals("d"))
        .collect(Collectors.toList());
System.out.println(subset1);

如前所述,dropWhile的作用与 takeWhile方法相反,因此在上面的示例中,如果使用,它将返回由 takeWhile谓词留下的所有字符。

List<String> alphabets = List.of("a", "b", "c", "d", "e", "f", "g", "h", "i");
List<String> subset2 = alphabets
        .stream()
        .dropWhile(s -> !s.equals("d"))
        .collect(Collectors.toList());
System.out.println(subset2);
日期:2020-09-17 00:10:05 来源:oir作者:oir