1.体验Stream流【理解】
按照下面的要求完成集合的创建和遍历
- 创建一个集合,存储多个字符串元素
- 把集合中所有以”张”开头的元素存储到一个新的集合
- 把”张”开头的集合中的长度为3的元素存储到一个新的集合
- 遍历上一步得到的集合
- 原始方式代码演示 ```java import java.util.ArrayList;
/**
- 按照下面的要求完成集合的创建和遍历
- • 创建一个集合,存储多个字符串元素
- • 把集合中所有以”张”开头的元素存储到一个新的集合
- • 把”张”开头的集合中的长度为3的元素存储到一个新的集合
- • 遍历上一步得到的集合
*/
public class StreamDemo01 {
public static void main(String[] args) {
} }ArrayList<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//遍历原始集合,将所有以张开头的元素储存到新的集合中
ArrayList<String> zhangList = new ArrayList<>();
for (String s : list) {
if (s.startsWith("张")) {
zhangList.add(s);
}
}
//遍历上一步得到的zhangList,筛选长度为3的元素储存到新的集合中
ArrayList<String> lengthIs3 = new ArrayList<>();
for (String s : zhangList) {
if (s.length() == 3) {
lengthIs3.add(s);
}
}
//遍历上一步得到的集合
for (String s : lengthIs3) {
System.out.println(s);
}
- 使用Stream流示例代码
```java
import java.util.ArrayList;
/**
* 按照下面的要求完成集合的创建和遍历
* • 创建一个集合,存储多个字符串元素
* • 把集合中所有以"张"开头的元素存储到一个新的集合
* • 把"张"开头的集合中的长度为3的元素存储到一个新的集合
* • 遍历上一步得到的集合
*/
public class Demo02 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println);
}
}
- Stream流的好处
- 直接阅读代码的字面意思即可完美展现无关逻辑方式的语句:获取流—>过滤姓张—>过滤长度为3—>遍历打印
- Stream流把真正的函数式编程风格引入到Java中
2.Stream流的常见生成方式【应用】
- Steam流的思想
- 生成Stream流的方法:
- Conllection集合
- 使用Conllection接口默认方法stream()生成流,default Stream
stream()
- 使用Conllection接口默认方法stream()生成流,default Stream
- Map集合
- 把Map集合转成Set集合,间接生成流
- 通过keySet( )获得key的set集合
- 通过values( )获得values的Conllection集合
- 通过entry( )获得entry<K,V>,的set集合
- 通过获得的Conllection类集合来调用stream方法获得stream流
- 把Map集合转成Set集合,间接生成流
- 数组
- Conllection集合
概念:中间操作的意思就是,执行完此次方法操作之后,返回值依然是一个Stream流对象,可以继续执行其他操作
常见方法
方法名 | 说明 |
---|---|
Stream |
用于对流中的数据进行筛选 |
Stream |
截取流中指定长度的数据,并返回该长度的新的流 |
Stream |
跳过流中指定长度的数据,并返回剩余数据的流 |
static |
【静态方法】将流a、b合并,并返回新的流 |
Stream |
返回由此流去重的元素组成的流 |
Stream |
返回此流按照自然顺序排序的流 |
Stream |
返回此流按照给定comparator排序的流 |
返回由给定函数转换之后的流 |
4.Stream流终端操作的方法【应用】
概念:终端操作(terminal operation)的意思就是执行完此操作之后,Stream流将不能在执行其他操作
常见方法
方法名 | 说明 |
---|---|
void forEach(Consumer action) | 对此流中的每个元素执行操作 |
long count() | 返回此流中的元素数量 |
5.Stream流的收集操作【应用】
概念 :对数据使用Stream流的方式操作完毕之后,可以把流中的数据收集到集合中。