八 JDK8新特性——第二节 Stream流式思想
2022-07-05 本文已影响0人
杜艳_66c4
1、使用传统的方式遍历集合
Stream 流有别于I/O流,是对集合和数组进行操作,解决集合数组的弊端
![](https://img.haomeiwen.com/i7116577/dc4ddfb3b103d7ad.png)
package con.day13.demo05.StreamAndMethod;
import java.util.ArrayList;
import java.util.List;
public class Demo01Test {
//使用传统方式对集合进行遍历
public static void main(String[] args) {
//创建一个集合,存储数据
ArrayList<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
List<String> zhangList1 = new ArrayList<>();
for (String name:list){
if (name.startsWith("张")){
zhangList1.add(name);
}
}
List<String> shortList = new ArrayList<>();
for (String name: zhangList1){
if (name.length() == 3){
shortList.add(name);
}
}
for (String name : shortList){ // 简写shortList.for()
System.out.println(name);
}
}
}
结果
张无忌
张三丰
2、使用Streaml流的方式,遍历集合
![](https://img.haomeiwen.com/i7116577/12490468c1d8bb4f.png)
package con.day13.demo05.StreamAndMethod;
import java.util.ArrayList;
/*
Stream 流是JDK 1.8之后出现的, 关注做什么,而不是怎么做
使用Stream流遍历结合,对集合中数据进行过滤
*/
public class Demo02Stream {
public static void main(String[] args) {
//创建一个集合,存储数据
ArrayList<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.stream()
.filter(name->name.startsWith("张"))
.filter(name->name.length() == 3)
.forEach(name-> System.out.println(name));
}
}
3、流式思想概述
流式思想类似于生产车间的流水线
![](https://img.haomeiwen.com/i7116577/935ddee4c607bced.png)
这里filter map skip 都是对函数模型进行操作,集合元素并没有真正被处理,只有当终结方法count执行的时候,整个模型才会按照指定策略执行操作,而这得益于Lambda的延迟执行特性
Stream其实是一个集合元素的函数模型,他并不是集合,也不是数据结构, 其本身并不存储任何元素或其他地址
![](https://img.haomeiwen.com/i7116577/57f7bdce7ea2aa15.png)