目录
3.8 列:集合元素处理(传统方式) 与Stream方式编程练习
1 传统集合的多步遍历代码
每当我们需要对集合中的元素进行操作的时候,总是需要进行循环、循环、再循环。这是理所当然的么?不是。循环是做事情的方式,而不是目的。另一方面,使用线性循环就意味着只能遍历一次。如果希望再次遍历,只能再使用另一个循环从头开始
列:1. 首先筛选所有姓张的人; 2. 然后筛选名字有三个字的人; 3. 最后进行对结果进行打印输出。
public class Demo01List {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
System.out.println("原数据:");
for (String name : list) {
System.out.print(name+"\t");
}
System.out.println();
//对list集合中的元素进行过滤,只要以张开头的元素,存储到一个新的集合中
List<String> list1 = new ArrayList<>();
for (String name : list) {
if(name.startsWith("张")){
list1.add(name);
}
}
//对listA集合进行过滤,只要姓名长度为3的人,存储到一个新集合中
List<String> list2 = new ArrayList<>();
for (String name : list1) {
if(name.length()==3){
list2.add(name);
}
}
System.out.println("结果:");
//遍历listB集合
for (String s : list2) {
System.out.print(s+"\t");
}
}
}
2 Stream的更优写法
Lambda的衍生物Stream
概念:Stream流是 Java8 API 新增的一个处理集合的关键抽象概念,是一个来自数据源的元素队列并支持聚合操作。以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。·
列:Stream的更优写法:1. 首先筛选所有姓张的人; 2. 然后筛选名字有三个字的人; 3. 最后进行对结果进行打印输出。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
//对list集合中的元素进行过滤,只要以张开头的元素,存储到一个新的集合中
//对listA集合进行过滤,只要姓名长度为3的人,存储到一个新集合中
//遍历listB集合
list.stream().filter((name)->name.startsWith("张")).filter((name)->name.length()==3).forEach(s -> System.out.println(s));
}
3 Stream流
“Stream流”其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何元素(或其地址值) |
Stream(流)是一个来自数据源的元素队列
|
和以前的Collection操作不同, Stream操作还有两个基础的特征:
Pipelining
:
中间操作都会返回流对象本身
。 这样多个操作可以串联成一个管道, 如同流式风格(flfluent style
)。 这样做可以对操作进行优化, 比如延迟执行
|