steam

 

声明性:说明想要完成什么操作而不是说明如何实现一个操作,使代码更简洁,更易读。

可复合:可以将几个基础操作连接在一起,来表达更加复杂的数据处理流水线,使数据处理更灵活。

可并行:基础操作如filter、sorted、map等与具体线程模型无关,因此内部实现可以是单线程的,也可以透明地运用多线程的架构,提高性能。

 

初识

 

introduce

根据《java8实战》中的定义,流是:从支持数据处理操作的源生成的元素序列

 

steamcollection

粗略的讲,流和集合之间的差异在于什么时候进行计算。集合是内存中的一个数据结构,包含数据结构中目前的所有值,因此每个元素都要先计算出来才能添加到集合中;流是概念上固定的数据结构,元素是按需计算的,就像是一个延迟创建的集合,只有在消费者需要的时候才会计算值。

 

只能遍历一次

并且,和迭代器类似,流只能遍历一次,当遍历结束,流就被消费掉了。

 

外部迭代和内部迭代

collection的迭代是使用外部迭代,如for-each语法,其内部是iterator的方式,即显式地将集合中的每个元素取出并加以处理。而stream使用内部迭代,代替我们进行迭代。使用内部迭代,主要是方便项目进行透明地并行处理,或者进行更优的并行处理,在外部迭代的时候,这些都是很困难的,但是在使用内部迭代的时候,steams的库可以自动的选择一种适合你的硬件数据表示和并行实现。

 

流的使用

流的使用一般包括三件事:一个数据源来执行一个查询,一个中间操作链形成一条流的流水线,一个终端操作执行流水线并生成结果。

 

流操作

 

分类

流操作分为两类,一类可以连接起来的流操作称为中间操作,一类关闭流的操作称为终端操作。除非流水线上触发了一个终端操作,不然中间操作不会进行任何处理,这是因为中间操作一般都可以合并起来,在终端操作时一次性全部处理。

 

 

 

你可能感兴趣的:(学习笔记,java8)