Java9新特性Stream流API优化与增强
目录
- 1.Stream.takeWhile(Predicate)
- 2.Stream.dropWhile(Predicate)
- 3.StreamStream.iterate(T,Predicate,UnaryOperator)
- 4.StreamStream.ofNullable(T)
- 5.IntStream,LongStream和DoubleStream方法
文章图片
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注。期待您能关注我,我将把java 9 写成一系列的文章,大概十篇左右,本文是第6篇。
本文带大家快速的了解一下在Java 9 种集合类Colleaction子类都发生了哪些比较有用的变化与增强。
【Java9新特性Stream流API优化与增强】在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 stream = Arrays.stream(fruits).takeWhile(s -> !"orange".equals(s)); stream.forEach(System.out::println);
控制台输出结果为,依次对数组中元素过滤,到orange元素满足了
!"orange" .equals(s)
=== false,流式处理不再继续直接返回。apple需要注意的是:对于无序Stream,如果存在多个与提供的Predicate匹配的元素(多个orange),则此操作返回值是不确定的。
banana
这种方法看上去和Java 8中的Stream.filter()很相似,但是它们的不同之处在于filter()方法只是跳过了不匹配的元素,然后继续进行处理。然而takeWhile()方法在存在匹配项之后会跳过所有剩余的元素,有点像continue和break的区别。以下是具有相同流和Predicate的filter()方法示例:
String[] fruits = {"apple", "banana", "orange", "mango", "peach"}; Stream 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 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 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 stream = Stream.of("apple", "banana", "orange"); Stream 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新特性Stream流API优化与增强的详细内容,更多关于Java9新特性Stream API增强的资料请关注脚本之家其它相关文章!
推荐阅读
- java9新特性Collection集合类的增强与优化方法示例
- CIS 2021网络安全创新大会《代码安全体系建设》实录
- Java9版本新特性同一个Jar支持多JDK版本运行
- 全面解读亚马逊云科技Private 5G的革新理念
- Visual|Visual Studio 2022最新版安装教程(图文详解)
- vue history路由模式下ios微信分享首次签名失败,二次刷新后成功
- StarRocks 2.1 新版本特性介绍
- 本书适合Python 程序员、数据分析人员《Python机器学习实践指南》(好书分享更新中)
- 2022年3月 新一期 NEAR认证开发者中文课程
- NextRPC : RPC多段返回的创新和探索