带你看看JDK8新特性:Stream流

相信兄弟萌在学习时碰到过这样的代码吧:

List<String> list = new ArrayList();
list.stream().forEach(a-> System.out.println(a));

我相信大家初次见到这种代码跟我一样,这 TM 是个啥?能看出来有一个 Lambda 表达式,另外这个 stream 是个啥?

有没有一点像 Steam,游戏下载平台,可以玩吃鸡、CSGO,扯远了,两者毫无关系。

下面我们来揭开 stream 的秘密,Go!

1.集合处理数据的弊端

欸,不是讲 stream 吗?怎么讲到集合的处理数据了。别急,我们从集合处理数据的弊端来引入 stream。

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

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

需求:

  1. 拿到所有姓张的
  2. 拿到名字长度为 3 个字的
  3. 打印这些数据
public static void main(String[] args) {
   

        ArrayList<String> list = new ArrayList<String>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");

        //1.拿到所有姓张的
        ArrayList<String> zhangList = new ArrayList<String>(); //{"张无忌","张强","张三丰"}
        for (String name : list) {
   
            if(name.startsWith("张")){
   
                zhangList.add(name);
            }
        }
    
        //2.拿到名字长度为3个字的
        ArrayList<String> threeList = new ArrayList<String>();//{"张无忌","张三丰"}
        for (String name : zhangList) {
   
            if(name.length() == 3){
   
                threeList.add(name);
            }
        }
    
        //3.打印这些数据              //{"张无忌","张三丰"}
        for (String name : threeList) {
   
            System.out.println(name);
        }
    }

可以看出:每个需求都要遍历一次集合,还要搞一个新集合来装数据,非常麻烦

2.Stream 流介绍

Stream 流不是一种数据结构,不保存数据,而是对集合中的数据进行加工处理。Stream 流式思想类似于工厂车间的 “生产流水线”。

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

带你看看JDK8新特性:Stream流_第1张图片
下面我们来看看借助 Stream 流来改造上面的代码:

public static void main(String[] args) {
   
        ArrayList<String> list = new ArrayList<String>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");
        l

你可能感兴趣的:(java,stream,jdk1.8)