1 package day14.lesson2;
2
3 import java.util.*;
4 import java.util.stream.Collectors;
5 import java.util.stream.Stream;
6
7 /*
8 2.6 Stream流的收集操作
9
10 对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中
11
12 Stream流的收集方法
13 R collect(Collector collector) 把结果收集到集合中,参数是一个Collector接口
14
15 工具类Collectors提供的具体的收集方式
16 public static Collector toList() 把元素收集到List集合中
17 public static Collector toSet() 把元素收集到Set集合中
18 public static Collector toMap(Function keyMapper,Function valueMapper) 把元素收集到Map集合中
19 */
20 public class Demo6Collect {
21 public static void main(String[] args) {
22 ArrayList<String> list = new ArrayList<>();
23 list.add("林青霞");
24 list.add("张曼玉");
25 list.add("王祖贤");
26 list.add("柳岩");
27
28 //需求1:获取长度为3的元素,组成一个流
29 Stream<String> listStream = list.stream().filter(s -> s.length() == 3);
30 //需求2:把使用Stream流操作完毕的数据收集到list集合中,并遍历
31 List<String> names = listStream.collect(Collectors.toList());
32 for (String name: names){
33 System.out.println(name);
34 }
35 System.out.println();
36
37 Set<Integer> set = new HashSet<>();
38 set.add(10);
39 set.add(20);
40 set.add(30);
41 set.add(33);
42 set.add(35);
43
44 //需求3:获取年龄大于25的元素,组成一个流
45 Stream<Integer> setStream = set.stream().filter(s -> s > 25);
46 //需求4:把使用Stream流操作完毕的数据收集到set集合中,并遍历
47 Set<Integer> ages = setStream.collect(Collectors.toSet());
48 for (Integer age: ages){
49 System.out.println(age);
50 }
51 System.out.println();
52
53 String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33", "柳岩,25"};
54
55 //需求5:获取数组中年龄大于28的元素,组成一个流
56 Stream<String> arrayStream = Stream.of(strArray).filter(s -> Integer.parseInt(s.split(",")[1]) > 28);
57 //需求6:把使用Stream流操作完毕的数据收集到Map集合中,并遍历;要求:姓名作为键、年龄作为值
58 Map<String, Integer> map = arrayStream.collect(Collectors.toMap(
59 s -> s.split(",")[0],
60 s -> Integer.parseInt(s.split(",")[1])
61 ));
62 Set<String> keySet = map.keySet();
63 for (String key: keySet){
64 Integer value = map.get(key);
65 System.out.println(key + "," + value);
66 }
67
68 }
69 }
