美文网首页
Java9系列第6篇-Stream流API的增强

Java9系列第6篇-Stream流API的增强

作者: 字母哥课堂 | 来源:发表于2020-10-19 06:34 被阅读0次

我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注。期待您能关注我,我将把java 9 写成一系列的文章,大概十篇左右,本文是第6篇。

本文带大家快速的了解一下在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

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

  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

相关文章

  • Java9系列第6篇-Stream流API的增强

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样...

  • Java大佬之学习历程(三)

    高级篇 Java8: lambda表达式、Stream API、Java9 :Jigsaw、J...

  • jdk8 Stream流

    jdk8 Stream流 1.Stream API 简介 Stream API是Java 8中加入的一套新的API...

  • java9新特性-13-增强的 Stream API

    1.使用说明 Java 的 Steam API 是java标准库最好的改进之一,让开发者能够快速运算,从而能够有效...

  • JDK8-Stream

    Stream概述 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行...

  • Stream

    使用 Stream API 高逼格 优化 Java 代码 Java8 Stream流中的 collect() 别再...

  • Stream API

    1. Stream API 简介 Stream API是 JDK8 的新特性,这种风格将要处理的元素集合看作一种流...

  • Java8 Stream-API

    Java8 Stream-API Stream 流类似集合类中的Iterator,但是比Iterator高级,只需...

  • Java自学-I/O Stream流

    Java的流 Stream 什么是流(Stream),流就是一系列的数据 步骤 1 : 什么是流 当不同的介质之间...

  • Java 8 中 Stream API 的奇淫技巧

    Stream简介 1、Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有I...

网友评论

      本文标题:Java9系列第6篇-Stream流API的增强

      本文链接:https://www.haomeiwen.com/subject/mvnhmktx.html