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

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

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

1. Stream.takeWhile(Predicate)


必看视频!获取2024年最新Java开发全套学习资料 备注Java


在进行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);



结语

小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

送给每一位想学习Java小伙伴,用来提升自己。

在这里插入图片描述

本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
摸索、精力浪费的方式。

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

送给每一位想学习Java小伙伴,用来提升自己。

[外链图片转存中…(img-WrTSxlui-1716449941653)]

本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值