发布于 

实习笔记-Stream流

一、Stream流

现有一个需求:

  • 将list集合中姓张的元素过滤到一个新的集合中;
  • 然后将过滤出来的姓张的元素中,再过滤出来长度为3的元素,存储到一个新的集合中;

1.1 常规方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 已知的知识来解决需求
List<String> list1 = new ArrayList<>();
list1.add("张老三");
list1.add("张小三");
list1.add("李四");
list1.add("赵五");
list1.add("张六");
list1.add("王八");

ArrayList<String> list2 = new ArrayList<>();
// 1.将list集合中姓张的元素过滤到一个新的集合中
for(String name : list1){
if(name.startsWith("张")){
list2.add(name);
}
}
ArrayList list3 = new ArrayList();
for (String name : list2) {
if (name.length() == 3){
list3.add(name);
}
}
System.out.println(list3);

输出结果:
[张老三, 张小三]

1.2 Stream流方式

1
2
3
4
5
6
list1.stream()
.filter((String name)->name.startsWith("张"))
.filter((String name)->name.length()==3)
.forEach((String name)->{
System.out.println("符合条件的姓名:" + name);
});

二、获取流

2.1 根据List获取流

1
2
3
4
5
6
7
8
9
// 创建List集合
List<String> list = new ArrayList<>();
list.add("张老三");
list.add("张小三");
list.add("李四");
list.add("赵五");
list.add("张六");
list.add("王八");
Stream<String> stream1 = list.stream();

2.2 根据Set获取流

1
2
3
4
5
6
7
8
9
// 创建List集合
Set<String> set = new HashSet<>();
list.add("张老三");
list.add("张小三");
list.add("李四");
list.add("赵五");
list.add("张六");
list.add("王八");
Stream<String> stream2 = set.stream();

2.3 根据Map获取流

1
2
3
4
5
6
7
8
 // 创建Map集合
Map<Integer,String> map = new HashMap<>();
map.put(1,"张老三");
map.put(2,"张小三");
map.put(3,"李四");
map.put(4,"赵五");
map.put(5,"张六");
map.put(6,"王八");

2.3.1 根据key获取

1
2
Set<Integer> map1 = map.keySet();
Stream<Integer> stream3 = map1.stream();

2.3.2 根据value获取

1
2
Collection<String> map2 = map.values();
Stream<String> stream4 = map2.stream();

2.3.3 根据k-v获取

1
2
Set<Map.Entry<Integer, String>> map3 = map.entrySet();
Stream<Map.Entry<Integer, String>> stream5 = map3.stream();

2.4 根据数组获取流

1
2
3
// 根据数组获取流
String[] arr = {"张颜宇","张三","李四","赵五","刘六","王七"};
Stream<String> stream6 = Stream.of(arr);

三、常用方法

方法名称 方法作用 方法种类 是否支持链式调用
count 统计个数 终结方法
forEach 逐一处理 终结方法
filter 过滤 函数拼接
limit 取用前几个 函数拼接
skip 跳过前几个 函数拼接
map 映射 函数拼接
concat 组合 函数拼接

四、收集流

把流中的数据收集到单例集合中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
List<String> list2 = new ArrayList<>();
list2.add("张老三");
list2.add("张小三");
list2.add("李四");
list2.add("赵五");
list2.add("张六");
list2.add("王八");

// 需求:过滤出姓张的并且长度为3的元素
Stream<String> stream = list2.stream().filter((String name) -> {
return name.startsWith("张");
}).filter((String name) -> {
return name.length() == 3;
});

// stream 收集到单列集合中
List<String> list = stream.collect(Collectors.toList());
System.out.println(list);

本站由 Cccccpg 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。