4.4 流操作
java.util.stream.Stream接口中的操作分为两大类:
- 中间操作:用于连接流构建流水线,例如filter、map、limit;
- 终端操作:触发流水线执行并关闭,例如collect;
4.4.1 中间操作
- 中间操作输入一个流,返回另一个流;
- 多个中间操作可以互相连接;
- 中间操作延迟化处理;
流水线示例
- filter和mapper循环合并,元素依次执行filter和mapper,再迭代下个元素;
- limit会触发短路,提前结束;
public static List<String> intermediateOperation(List<Dish> menu) {
Stream<Dish> stream = menu.stream()
.filter(d -> {
System.out.println("filter: " + d.getName());
return d.getCalories() > 500;
});
return stream
.map(d -> {
System.out.println("map: " + d.getName());
return d.getName();
})
.limit(3)
.collect(Collectors.toList());
}
/*
filter: pork
map: pork
filter: beef
map: beef
filter: chicken
filter: french fries
map: french fries
*/
4.4.2 终端操作
- 终端操作输入一个流,返回生成结果,例如List,Integer,甚至void;
- 终端操作至多连接一个;
- 终端操作触发流水线的执行;
测验4.1:中间操作与终端操作
在下列流水线中,找出中间操作和终端操作。
long count = menu.stream()
.filter(d-> d.getCalories() > 300)
.distinct()
.limit(3)
.count();
filter、distinct、limit都是中间操作,count是终端操作。
4.4.3 使用流
流的理念类似构建器模式,调用链配置属性,build方法创建最终对象。
- 一个数据源初始化流;
- 一个中间操作链构建流水线;
- 一个终端操作执行流水线,并能生成结果;

浙公网安备 33010602011771号