目录
一、简介
Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式。Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选等操作。
二、Stream流的应用
2.1 为什么使用stream流
当我们对集合中的元素进行操作的时候,除了必须的添加、删除、获取外,最典型的就是集合遍历。我们可以来展示一下集合操作数据的弊端,需求如下:
需求:
一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
package demo01;
import java.util.ArrayList;
import java.util.List;
/**
* @author huihui
* @Project jdk8_stream
* @date 2023/6/14 14:28
*/
public class Test {
// 一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
// 需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("孙悟空");
list.add("张三丰");
list.add("张三");
//1. 拿到所有姓张的人名
List<String> newList01 = new ArrayList<>();
for (String s : list) {
if(s.startsWith("张")){//startsWith--以...开头
newList01.add(s);
}
}
//2.拿到名字长度为3个字的
ArrayList<String> newList02 = new ArrayList<>();
for (String s : newList01) {
if(s.length()==3){
newList02.add(s);
}
}
//3.打印这些数据
for (String s : newList02) {
System.out.println(s);
}
}
}
分析:
循环遍历的弊端
这段代码中含有三个循环,每一个的作业都不同
1.首先筛选张姓的人
2.然后筛选名字有三个字的人
3.最后进行对结果进行打印输出
每当我们需要对集合中的元素进行操作的时候,总是需要进行循环、循环、再循环。这是理所当然的么?不是。循环 是做事情的方式,而不是目的。每个需求都要循环一次,还要搞一个新集合来装数据,如果希望再次遍历,只能再使 用另一个循环从头开始。
那Stream能给我们带来怎样更加方便的写法呢?
Stream初体验
package demo01;
import java.util.ArrayList;
import java.util.List;
/**
* @author huihui
* @Project jdk8_stream
* @date 2023/6/14 14:28
*/
public class Test {
// 一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
// 需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("孙悟空");
list.add("张三丰");
list.add("张三");
list.stream().filter(t->t.startsWith("张")).filter(t->t.length()==3).forEach(item-> System.out.println(item));
}
}