博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java9新特性系列(Stream改进)
阅读量:6831 次
发布时间:2019-06-26

本文共 3205 字,大约阅读时间需要 10 分钟。

Java8的Stream

在Java8中,一个比较大的变化就是流(Stream),具体可以看之前的一篇文章:

Java9的Stream

Java9中Stream增加了4个方法,分别是:

  • takeWhile:在有序的Stream中,takeWhile返回从开头开始的尽量多的元素
default Stream
takeWhile(Predicate
predicate) { Objects.requireNonNull(predicate); // Reuses the unordered spliterator, which, when encounter is present, // is safe to use as long as it configured not to split return StreamSupport.stream( new WhileOps.UnorderedWhileSpliterator.OfRef.Taking<>(spliterator(), true, predicate), isParallel()).onClose(this::close);}复制代码
  • dropWhile:与takeWhile相反
default Stream
dropWhile(Predicate
predicate) { Objects.requireNonNull(predicate); // Reuses the unordered spliterator, which, when encounter is present, // is safe to use as long as it configured not to split return StreamSupport.stream( new WhileOps.UnorderedWhileSpliterator.OfRef.Dropping<>(spliterator(), true, predicate), isParallel()).onClose(this::close);}复制代码
  • ofNullable:可以创建一个单元素Stream,可以为null
public static
Stream
ofNullable(T t) { return t == null ? Stream.empty() : StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);}复制代码
  • iterate
public static
Stream
iterate(final T seed, final UnaryOperator
f) { Objects.requireNonNull(f); Spliterator
spliterator = new Spliterators.AbstractSpliterator<>(Long.MAX_VALUE, Spliterator.ORDERED | Spliterator.IMMUTABLE) { T prev; boolean started; @Override public boolean tryAdvance(Consumer
action) { Objects.requireNonNull(action); T t; if (started) t = f.apply(prev); else { t = seed; started = true; } action.accept(prev = t); return true; } }; return StreamSupport.stream(spliterator, false);}复制代码

除了对 Stream 本身的扩展,Optional和Stream之间的结合也得到了改进,可以将optional对象转化为stream对象:

List
list = new ArrayList<>() {
{ add("a");add("b");add("c");}};Optional
> optional = Optional.ofNullable(list);Stream
> stream = optional.stream();stream.flatMap(x -> x.stream()).forEach(System.out::println);复制代码

使用举例

  • takeWhile
List
list = Arrays.asList(1, 4, 5, 2, 3, 6, 7, 8, 9, 10);list.stream().takeWhile(x -> x < 5).forEach(System.out::println);复制代码

输出:

1
4

  • dropWhile
List
list = Arrays.asList(1, 4, 5, 2, 3, 6, 7, 8, 9, 10);list.stream().dropWhile(x -> x < 5).forEach(System.out::println);复制代码

输出:

5
2
3
6
7
8
9
10

  • ofNullable
Stream
stream = Stream.of("", null);System.out.println(stream.count());Stream
stream = Stream.of(null);System.out.println(stream.count());//会抛空指针异常Stream
stream = Stream.ofNullable(null);System.out.println(stream.count());复制代码

输出:

2
0

  • iterate
//java8Stream.iterate(1, i -> i + 1).limit(5).forEach(System.out::println);//java9Stream.iterate(1, i -> i < 6, i -> i + 1).forEach(System.out::println);复制代码

输出:

1
2
3
4
5

微信公众号:
码上论剑
请关注我的个人技术微信公众号,订阅更多内容

转载地址:http://mnnkl.baihongyu.com/

你可能感兴趣的文章
芝麻HTTP:Python爬虫入门之Urllib库的高级用法
查看>>
nginx.conf配置文件的参数详解
查看>>
航空订票系统
查看>>
Zabbix 通过 SNMP 监控设备
查看>>
CRM和ERP的Sales Organization的映射关系
查看>>
Ubuntu12.04不能调节屏幕亮度的办法
查看>>
【Centos】在nginx服务器中配置php和mysql
查看>>
ETCgame再升级,焕然一新的界面,极尽舒适的体验!
查看>>
基本类型优于封装类型(49)
查看>>
Spring声明式事务不回滚问题
查看>>
13.su命令 sudo命令 限制root远程连接
查看>>
【Stimulsoft Reports Flex教程】为Viewer和Designer设置本地化
查看>>
今天的学习
查看>>
Bitcoin.com或将推出以BCH为基础货币的交易所
查看>>
Mysql中的行级锁、表级锁、页级锁
查看>>
《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
查看>>
WinSCP得到root权限 ubuntn
查看>>
你应该知道的高性能无锁队列Disruptor
查看>>
(转载)学好 Python 的 11 个优秀资源
查看>>
Python项目实战:爬取每一个歌单中的歌曲列表
查看>>