JDK8新特性之Stream流

目录

一、简介

二、Stream流的应用

2.1 为什么使用stream流

2.2 Stream流的原理

 2.3 步骤

 2.4 获取Stream流对象的方式

2.5 Stream流的API方法

2.5.1 map

2.5.2 collect 收集

2.5.3  sorted 排序

2.5.4 reduce 规约

2.5.5 findFirst 查询第一个


一、简介

Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式。Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选等操作

二、Stream流的应用

2.1 为什么使用stream流

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

需求:

        一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
        1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据

package demo01;

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

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 14:28
 */
public class Test {
    //        一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
    //        需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("孙悟空");
        list.add("张三丰");
        list.add("张三");

        //1. 拿到所有姓张的人名
        List<String> newList01 = new ArrayList<>();
        for (String s : list) {
            if(s.startsWith("张")){//startsWith--以...开头
                newList01.add(s);
            }
        }

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

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

分析:

循环遍历的弊端

这段代码中含有三个循环,每一个的作业都不同

        1.首先筛选张姓的人

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

        3.最后进行对结果进行打印输出

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

那Stream能给我们带来怎样更加方便的写法呢?

Stream初体验

package demo01;

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

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 14:28
 */
public class Test {
    //        一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
    //        需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("孙悟空");
        list.add("张三丰");
        list.add("张三");

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

    }
}

2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值