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); }
原文:https://www.cnblogs.com/liuyang-520/p/12902534.html