Stream流只能使用一次


package com.itheima.d2_stream;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Set;import java.util.stream.Collectors;import java.util.stream.Stream;/*** 目标: 收集Stream流的数据到 集合或者数组中去*/public class StreamDemo5 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");list.add("张三丰");// 这里过滤出姓张的人, 得到的结果还是 stream流 所以要将Stream流收集起来,指定收集器(List,Map,Set)Stream<String> s1 = list.stream().filter(s -> s.startsWith("张"));// 1. 收集到ArrayList集合中去 (可变集合)List<String> zhangList = s1.collect(Collectors.toList());// 遍历流中的每个数据,扔到一个ArrayList集合中去,再返回给我们System.out.println(zhangList); //[张无忌, 张强, 张三丰, 张三丰]// List<String> list1 = s1.toList(); // 得到不可变集合// list1.add("Java");// System.out.println(list1);// 2. 收集到Set集合中去// 这里要创建一个新流 因为之前的流已经使用过了, 流只能使用一次Stream<String> s2 = list.stream().filter(s -> s.startsWith("张"));// 将Stream流收集到Set集合中去Set<String> zhangSet = s2.collect(Collectors.toSet());System.out.println(zhangSet); // [张强, 张三丰, 张无忌] 无序的// 将流收集到数组里面去 泛型不能约束流里面的数据Stream<String> s3 = list.stream().filter(s -> s.startsWith("张"));// 用Object类型接收,因为流里面可以放任意类型Object[] arrs = s3.toArray(); // 数组里面可能存储其他类型System.out.println(Arrays.toString(arrs)); //[张无忌, 张强, 张三丰, 张三丰]}}
