Stream流
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
相识是缘