4.4 流操作

java.util.stream.Stream接口中的操作分为两大类:

  1. 中间操作:用于连接流构建流水线,例如filter、map、limit;
  2. 终端操作:触发流水线执行并关闭,例如collect;
中间操作与终端操作

4.4.1 中间操作

  1. 中间操作输入一个流,返回另一个流;
  2. 多个中间操作可以互相连接;
  3. 中间操作延迟化处理;

流水线示例

  1. filter和mapper循环合并,元素依次执行filter和mapper,再迭代下个元素;
  2. 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 终端操作

  1. 终端操作输入一个流,返回生成结果,例如List,Integer,甚至void;
  2. 终端操作至多连接一个;
  3. 终端操作触发流水线的执行;

测验4.1:中间操作与终端操作

在下列流水线中,找出中间操作和终端操作。

long count = menu.stream()
    .filter(d-> d.getCalories() > 300)
    .distinct()
    .limit(3)
    .count();

filter、distinct、limit都是中间操作,count是终端操作。

4.4.3 使用流

流的理念类似构建器模式,调用链配置属性,build方法创建最终对象。

  1. 一个数据源初始化流;
  2. 一个中间操作链构建流水线;
  3. 一个终端操作执行流水线,并能生成结果;
posted @ 2023-07-05 01:06  蒋智  阅读(31)  评论(0)    收藏  举报