首页 > 技术文章 > Stream流

liuyang-520 2020-05-16 22:25 原文

1、Stream流属于管道流,只能被消费一次,不论中间调用了多少个Stream流的方法,其中消费类型的方法只有一个且只能在最后调用

// 如下代码编译失败,forEach会消费类型的方法,后面不能再调用任何类型的Stream流方法

@Test
public void test3() {
    // 原始Stream流
    Stream<String> st1 = Stream.of("张三","张无忌","赵敏","张三丰","周芷若");
    st1.filter(name -> name.startsWith("张"))
            .filter(name -> name.length() == 3)
            .forEach(name -> System.out.println(name))
            .forEach(name -> System.out.println(name));
}

2、前一个Stream流调用完毕后数据会流转到下一个Stream流,此时前一个Stream流已经使用完毕就会关闭,因此Stream流只能调用一次Stream流方法

// 如下代码中Stream流st1被调用了2次了,会抛出运行时异常

@Test
public void test4() {
    // 原始Stream流
    Stream<String> st1 = Stream.of("张三","张无忌","赵敏","张三丰","周芷若");
    st1.filter(name -> name.startsWith("张"));
    st1.filter(name -> name.length() == 3);
}

3、Stream流方法分为最终方法和延迟方法

// 最终方法不可以再调用任何Stream流方法

// 延迟方法可以再调用Stream流方法

3.1、最终方法

forEach、count

3.2、延迟方法

filter、map、limit、skip

推荐阅读