Stream流只能使用一次
    image.png
    image.png
    image.png

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