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)); //[张无忌, 张强, 张三丰, 张三丰]
}
}