JDK8新特性之Stream流01

发布于:2024-12-09 ⋅ 阅读:(128) ⋅ 点赞:(0)

Stream 流介绍

目标

了解集合的处理数据的弊端

理解Stream流的思想和作用

集合处理数据的弊端

        当我们需要对集合中的元素进行操作的时候,除了必须的添加,删除,获取外,最典型的就是遍历集合。我们来体验集合操作的弊端,需求如下:

一个 ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,张强,张三丰

需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据

代码如下: 

public class StreamTest {
    public static void main(String[] args) {
        // 一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,张强,张三丰
        // 需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌", "周芷若", "赵敏", "张强", "张三丰");

        // 1.拿到所有姓张的
        ArrayList<String> zhanglist = new ArrayList<>();
        for (String name : list) {
            if(name.startsWith("张")){
                zhanglist.add(name);
            }
        }

        // 2.拿到名字长度为3个字的
        ArrayList<String> lengthlist = new ArrayList<>();
        for (String name : zhanglist){
            if(name.length() == 3){
                lengthlist.add(name);
            }
        }

        //3.打印这些数据
        for (String name: lengthlist) {
            System.out.println(name);
        }
    }
}

循环遍历的弊端

这段代码中含有三个循环,每一个作用不同。

        1.首先筛选所有姓张的人;

        2.然后筛选名字又三个字的人;

        3.最后进行输出打印。

每当我们需要对集合中的元素进行操作时,总需要进行循环,循环,再循。这是理所当然的吗?不是。循环是做事情的方式,而不是目的。每个需求都要循环一次,还要搞一个新集合来装数据,如果希望再次遍历,只能使用另一个循环从头开始。

那Stream能给我们带来怎么样的写法呢?

Stream更优的写法。

下面来看一下借助Java 8的Stream API,修改后的代码

public class StreamTest01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        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);
    }
}

直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打印。我们真 正要做的事情内容被更好地体现在代码中。

Stream流式思想概述

注意:Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象!

Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工 处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品。

Stream API能让我们快速完成许多复杂的操作,如筛选、切片、映射、查找、去除重复,统计,匹配和归约。

小结:首先我们了解了集合操作数据的弊端,每次都要循环遍历,还要创建新的集合,很麻烦。

Stream是流式思想,相当于工厂的流水线,对集合中的数据进行加工处理


网站公告

今日签到

点亮在社区的每一天
去签到