下载此文档

Java Stream 使用详解 – 码农网.doc


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
Java Stream 使用详解 – 码农网
Stream是 Java 8新增加的类,用来补充集合类。Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并没有提供访问和管理元素的方式,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,()()操作提供了遍历元素的方法。Java Stream提供了提供了串行和并行两种类型的流,保持一致的接口,提供函数式编程方式,以管道方式提供中间操作和最终执行操作,为Java语言的集合提供了现代语言提供的类似的高阶函数操作,简化和提高了Java集合的功能。本文首先介绍Java Stream的特点,然后按照功能分类逐个介绍流的中间操作和终点操作,最后会介绍第三方为Java Stream做的扩展。前年年底的时候我写了一些关于Java 8 Lambda和Stream的文章,本文应该在那个时候完成。后来忙于项目和写《Scala集合技术手册》(Scala Collections Cookbook)这本书,一直没来得及写Java Stream的文章,现在这篇文章算是对 Java Stream的一个总结吧。介绍本节翻译整理自 Javadoc ,并对流的这些特性做了进一步的解释。Stream接口还包含几个基本类型的子接口如IntStream, LongStream 和 DoubleStream。关于流和其它集合具体的区别,可以参照下面的列表:不存储数据 。流是基于数据源的对象,它本身不存储数据元素,而是通过管道将数据源的元素传递给操作。函数式编程 。流的操作不会修改数据源,例如filter不会将数据源中的数据删除。延迟操作 。流的很多操作如filter,map等中间操作是延迟执行的,只有到终点操作才会将操作顺序执行。可以解绑 。对于无限数量的流,有些操作是可以在有限的时间完成的,比如limit(n)或findFirst(),这些操作可是实现”短路”(Short-circuiting),访问到有限的元素后就可以返回。纯消费 。流的元素只能访问一次,类似Iterator,操作没有回头路,如果你想从头重新访问流的元素,对不起,你得重新生成一个新的流。流的操作是以管道的方式串起来的。流管道包含一个数据源,接着包含零到N个中间操作,最后以一个终点操作结束。并行 Parallelism所有的流操作都可以串行执行或者并行执行。除非显示地创建并行流,否则Java库中创建的都是串行流。()()为集合创建并行流。(int, int)创建的是串行流。通过parallel()方法可以将串行流转换成并行流,sequential()方法将流转换成并行流。除非方法的Javadoc中指明了方法在并行执行的时候结果是不确定(比如findAny、forEach),否则串行和并行执行的结果应该是一样的。不干涉 Non-interference流可以从非线程安全的集合中创建,当流的管道执行的时候,非concurrent数据源不应该被改变。:List l = new ArrayList(('one', 'two'));Stream sl = ();(s -> ('three'));在设置中间操作的时候,可以更改数据源,只有在执行终点操作的时候,才有可能出现并发问题(抛出异常,或者不期望的结果),比如下面的代码不会抛出异常:List l = new ArrayList(('one', 'two'));Stream sl = ();('three');(::println);对于concurrent数据源,不会有这样的问题,比如下面的代码很正常:List l = new CopyOnWriteArrayList(('one', 'two'));Stream sl = ();(s -> ('three'));虽然我们上面例子是在终点操作中对非并发数据源进行修改,但是非并发数据源也可能在其它线程中修改,同样会有并发问题。无状态 Sta

Java Stream 使用详解 – 码农网 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人学习的一点
  • 文件大小39 KB
  • 时间2021-07-25