服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java9新特性Stream流API优化与增强

Java9新特性Stream流API优化与增强

2022-09-24 15:13字母哥哥 Java教程

这篇文章主要为大家介绍了Java9新特性Stream流API优化与增强的用法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步,早日升职加薪

Java9新特性Stream流API优化与增强

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

java9在interface中定义私有方法详解

java9版本特性资源自动关闭的语法增强

Java9版本新特性同一个Jar支持多JDK版本运行

java9新特性Reactive Stream响应式编程 API

java9新特性Collection集合类的增强与优化方法示例

Java9新特性Java.util.Optional优化与增强解析

Java9新特性Module模块化编程示例演绎

Java9新特性对HTTP2协议支持与非阻塞HTTP API

本文带大家快速的了解一下在Java 9 种集合类Colleaction子类都发生了哪些比较有用的变化与增强。

在Java 9中对Java Util Stream的语法进行了优化和增强,下面我就和大家一起看一下有哪些比较有价值的使用方法。

1. Stream.takeWhile(Predicate)

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

?
1
2
3
4
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()方法示例:

?
1
2
3
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之后,此元素后面的所有数据元素作为返回值返回。

?
1
2
3
4
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来提供

?
1
2
3
4
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。当我们要将非空单个元素附加到流时,此方法很有用。例如:

?
1
2
3
4
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()方法除外)。

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

以上就是Java9新特性Stream流API优化与增强的详细内容,更多关于Java9新特性Stream API增强的资料请关注服务器之家其它相关文章!

原文链接:https://zimug.blog.csdn.net/article/details/109153574

延伸 · 阅读

精彩推荐
  • Java教程专属于程序员的浪漫-Java输出动态闪图iloveyou

    专属于程序员的浪漫-Java输出动态闪图iloveyou

    这篇文章主要介绍了专属于程序员的浪漫-Java输出动态闪图iloveyou,具有一定参考价值,需要的朋友可以了解下。...

    mengwei9362021-02-18
  • Java教程java基础之字符串编码知识点总结

    java基础之字符串编码知识点总结

    这篇文章主要介绍了java基础之字符串编码总结,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好的帮助,要的朋友可以参考下...

    吃透Java3982021-09-09
  • Java教程Java开发中的容器概念、分类与用法深入详解

    Java开发中的容器概念、分类与用法深入详解

    这篇文章主要介绍了Java开发中的容器概念、分类与用法,结合实例形式较为详细的分析了java容器的相关概念、分类、使用方法与注意事项,需要的朋友可以参...

    安静的技术控9842021-01-31
  • Java教程Java数据类型转换详解

    Java数据类型转换详解

    这篇文章主要讲解Java中基本数据类型、字符串与其它数据类型以及常见的日期类型的转换,希望能给大家做一个参考。 ...

    kingxss2572020-05-16
  • Java教程java基于servlet的文件异步上传

    java基于servlet的文件异步上传

    本篇文章主要介绍了java基于servlet的文件异步上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    雪山飞鹄2212020-06-27
  • Java教程Java中支持可变参数详解

    Java中支持可变参数详解

    那个可变参数的就是个数组,你传多少个参数都被放到那个数组里面。这样方便了程序员,因为如果不确定要传的参数的个数的话,我们要写带1个参数的,...

    hebedich4302019-12-17
  • Java教程使用java实现手机短信验证全过程

    使用java实现手机短信验证全过程

    这篇文章主要介绍了使用java实现手机短信验证全过程,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...

    藤井大叔10592021-09-07
  • Java教程Java基于TCP方式的二进制文件传输

    Java基于TCP方式的二进制文件传输

    这篇文章主要为大家介绍了Java基于TCP方式的二进制文件传输,一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成,感兴趣的小伙伴们可以参...

    gloomyfish1622020-03-22