Java Stream

Stream

Java8新增了Stream的概念
Stream是对集合对象(Collections)功能的增强,她专注于对集合对象的进行各种便利、高效的操作,或者大批量数据操作。
Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,
并发模式能够充分利用多核处理器的优势,使用 fork
/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错,
但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。
什么是流

Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。

Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。

而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。Stream 的并行操作依赖于 Java7 中引入的 Fork/Join 框架(JSR166y)来拆分任务和加速处理过程。

Stream 的另外一大特点是,数据源本身可以是无限的。
有多种方式生成 Stream Source:
从 Collection 和数组
    Collection.stream()
    Collection.parallelStream()
    Arrays.stream(T array) or Stream.of()
从 BufferedReader
    java.io.BufferedReader.lines()
静态工厂
    java.util.stream.IntStream.range()
    java.nio.file.Files.walk()
自己构建
    java.util.Spliterator
其它
    Random.ints()
    BitSet.stream()
    Pattern.splitAsStream(java.lang.CharSequence)
    JarFile.stream()

 

更多内容 请参考:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

posted @ 2018-12-07 16:19  Ysoo  Views(201)  Comments(0Edit  收藏  举报