Java Stream

Streamjava

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)来拆分任务和加速处理过程。api

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/数组

相关文章
相关标签/搜索