62 lines
1.3 KiB
Markdown
62 lines
1.3 KiB
Markdown
Java API 新成员,允许以声明性方式处理数据(通过查询语句表达,非临时编写一个实现)
|
||
|
||
## 流是什么
|
||
|
||
通过parallelStream()多线程执行
|
||
|
||
```java
|
||
List<String> 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. 一个终端操作,执行流水线,并能生成结果
|
||
|