关于spring:Java9系列第6篇Stream流API的增强

53次阅读

共计 2626 个字符,预计需要花费 7 分钟才能阅读完成。


我打算在后续的一段时间内,写一系列对于 java 9 的文章,尽管 java 9 不像 Java 8 或者 Java 11 那样的外围 java 版本,然而还是有很多的个性值得关注。期待您能关注我,我将把 java 9 写成一系列的文章,大略十篇左右,本文是第 6 篇。

  • java9 系列文章拜访地址

本文带大家疾速的理解一下在 Java 9 种汇合类 Colleaction 子类都产生了哪些比拟有用的变动与加强。

在 Java 9 中对 Java Util Stream 的语法进行了优化和加强,上面我就和大家一起看一下有哪些比拟有价值的应用办法。

1. Stream.takeWhile(Predicate)

在进行 Stream 流的管道数据处理的时候,提供的 Predicate 条件返回 false 之后,将跳过残余的数据元素间接返回。在上面的示例中,一旦 Predicate 条件 !"orange" .equals(s) 返回 false,则将跳过其余元素:

 String[] fruits = {"apple", "banana", "orange", "mango", "peach"};
 Stream<String> stream = Arrays.stream(fruits)
                               .takeWhile(s -> !"orange".equals(s));
 stream.forEach(System.out::println);

控制台输入后果为,顺次对数组中元素过滤,到 orange 元素满足了!"orange" .equals(s) === false,流式解决不再持续间接返回。

 apple
 banana

须要留神的是:对于无序 Stream,如果存在多个与提供的 Predicate 匹配的元素(多个 orange),则此操作返回值是不确定的。

这种办法看上去和 Java 8 中的 Stream.filter()很类似,然而它们的不同之处在于 filter()办法只是跳过了不匹配的元素,而后持续进行解决。然而 takeWhile()办法在存在匹配项之后会跳过所有残余的元素,有点像 continue 和 break 的区别。以下是具备雷同流和 Predicate 的 filter()办法示例:

 String[] fruits = {"apple", "banana", "orange", "mango", "peach"};
 Stream<String> stream = Arrays.stream(fruits).filter(s -> !"orange".equals(s));
 stream.forEach(System.out::println);

控制台输入如下,只是把 orange 过滤掉了。

 apple
 banana
 mango
 peach

2.Stream.dropWhile(Predicate)

提供的 Predicate 条件在管道流中返回 false 之后,此元素前面的所有数据元素作为返回值返回。

String[] fruits = {"apple", "banana", "orange", "mango", "peach"};
 Stream<String> stream = Arrays.stream(fruits)
                            .dropWhile(s -> !"orange".equals(s));
 stream.forEach(System.out::println);

在下面示例中,一旦 Predicate 条件 !"orange".equals(s) 返回 false,管道流中残余的元素将被承受(不被过滤),作为返回值返回:

 orange
 mango
 peach

3.Stream Stream.iterate(T,Predicate,UnaryOperator)

一旦 Predicate 条件返回 false,此办法将返回一个程序流,该程序流将进行迭代操作。T 为初始值,迭代操作由 UnaryOperator 来提供

 Stream<String> iterate = Stream.iterate("-", 
                                  s -> s.length() < 5,    //Predicate 条件
                                  s -> s + "-");   // 迭代操作
 iterate.forEach(System.out::println);

控制台打印输出的后果,只输入四个横杠,到第五个的时候进行。这是由 Predicate 条件决定的。

 -
 --
 ---
 ----

4.Stream Stream.ofNullable(T)

此办法返回一个蕴含单个元素的程序 Stream。如果提供的元素为 null,则此办法返回空 Stream。当咱们要将非空单个元素附加到流时,此办法很有用。例如:

 String nullableItem = "peach";
 Stream<String> stream = Stream.of("apple", "banana", "orange");
 Stream<String> stream2 = Stream.concat(stream, Stream.ofNullable(nullableItem));
 stream2.forEach(System.out::println);

控制台打印输出后果如下:

 apple
 banana
 orange
 peach

5.IntStream,LongStream 和 DoubleStream 办法

上面的这些 XxxStream 类也具备与 Stream 类等效的办法(ofNullable()办法除外)。

 IntStream.of(2, 4, 6, 8, 9, 10, 11)
          .takeWhile(i -> i % 2 == 0)
          .forEach(System.out::println);   //2,4,6,8
 IntStream.of(2, 4, 6, 8, 9, 10, 11)
          .dropWhile(i -> i % 2 == 0)
          .forEach(System.out::println);  // 9,10,11
 IntStream.iterate(0, i -> i < 10, i -> i + 1)
          .forEach(System.out::print); // 0123456789

欢送关注我的博客,外面有很多精品合集

本文转载注明出处(必须带连贯,不能只转文字):字母哥博客 – zimug.com

感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源!。另外,笔者最近一段时间输入了如下的精品内容,期待您的关注。

  • 《手摸手教你学 Spring Boot2.0》
  • 《Spring Security-JWT-OAuth2 一本通》
  • 《实战前后端拆散 RBAC 权限管理系统》
  • 《实战 SpringCloud 微服务从青铜到王者》
  • 《VUE 深入浅出系列》

正文完
 0