Java API 新成员,允许以声明性方式处理数据(通过查询语句表达,非临时编写一个实现) ## 流是什么 通过parallelStream()多线程执行 ```java List lowCaloricDishesName= menu.parallelStream() .filter(d-> d.getCalories() < 400) .sorted(comparing(Dishes::getCalories)) .map(Dish::getName) .collect(toList()); ``` - 代码以**声明性**方式写的,说明想要完成什么,而不是说明如何实现一个操作 - 可以把几个基础操作链接起来,来表达复杂的数据处理流水线 特点: - 声明性 - 可复合 - 可并行 流是什么? - 元素序列 - 源 - 数据处理操作 - 流水线 - 内部迭代 ## 流与集合 **只能遍历一次** 流只能遍历一次,遍历之后,就被消费掉了 ### 外部迭代和内部迭代 Collection接口需要用户迭代,成为外部迭代。 Stream库使用内部迭代,帮你把迭代做了,还把得到的值存在某个地方 ## 流操作 ### 中间操作 **filter**, **sorted** 等中间操作会返回另一个流 ## 终端操作 **foEach**,**count**, 返回Void,long类型,从流的流水线产生结果 ### 使用流 1. 一个数据源(集合)来执行一个查询 2. 一个中间操作链,形成一条流的流水线 3. 一个终端操作,执行流水线,并能生成结果