八 JDK8新特性——第二节 Stream流式思想

1、使用传统的方式遍历集合

Stream 流有别于I/O流,是对集合和数组进行操作,解决集合数组的弊端


循环弊端
package con.day13.demo05.StreamAndMethod;

import java.util.ArrayList;
import java.util.List;

public class Demo01Test {
    //使用传统方式对集合进行遍历
    public static void main(String[] args) {
        //创建一个集合,存储数据
        ArrayList list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        List zhangList1 = new ArrayList<>();
           for (String name:list){
            if (name.startsWith("张")){
                zhangList1.add(name);
            }
        }
          List shortList = new ArrayList<>();
           for (String name: zhangList1){
               if (name.length() == 3){
                   shortList.add(name);
               }
           }

           for (String name : shortList){  // 简写shortList.for()
               System.out.println(name);
           }
    }

}

结果
张无忌
张三丰

2、使用Streaml流的方式,遍历集合

循环弊端
package con.day13.demo05.StreamAndMethod;

import java.util.ArrayList;
/*
Stream 流是JDK 1.8之后出现的, 关注做什么,而不是怎么做
使用Stream流遍历结合,对集合中数据进行过滤
 */
public class Demo02Stream {
    public static void main(String[] args) {
        //创建一个集合,存储数据
        ArrayList list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("张强");
        list.add("张三丰");

        list.stream()
                .filter(name->name.startsWith("张"))
                .filter(name->name.length() == 3)
                .forEach(name-> System.out.println(name));
    }
}

3、流式思想概述

流式思想类似于生产车间的流水线


集合元素的处理方案,流式思想

这里filter map skip 都是对函数模型进行操作,集合元素并没有真正被处理,只有当终结方法count执行的时候,整个模型才会按照指定策略执行操作,而这得益于Lambda的延迟执行特性

Stream其实是一个集合元素的函数模型,他并不是集合,也不是数据结构, 其本身并不存储任何元素或其他地址

你可能感兴趣的:(八 JDK8新特性——第二节 Stream流式思想)