java stream 多个filter_跟光磊学Java开发-流式编程

本文介绍了如何使用Java Stream API进行流式编程,通过实例展示了如何使用多个filter方法筛选姓张且名字长度大于等于3的人。讲解了流式编程思想,强调其延迟执行和不可重复使用的特性,并探讨了获取流的方式,如从集合、数组中获取。此外,还列举了Stream的常用方法,包括终结方法如count()、forEach(),以及延迟方法如filter()、limit()、skip()、map()和collect()等。
摘要由CSDN通过智能技术生成

使用Stream API操作集合

假设现在有一批名字数据,需要筛选出姓张的人
后来需求又变了,需要筛选出姓张,而且名字长度大于等于3的人

使用传统方式操作集合
只要操作集合都不得不需要使用循环遍历元素
每次筛选后都需要使用新的集合存储元素

package net.ittimeline.java.core.jdk.feature.java8.stream;import lombok.extern.log4j.Log4j2;import java.util.ArrayList;import java.util.List;/** * 传统方式操作集合和stream操作集合 * * @author tony 18601767221@163.com * @version 2020/12/25 13:11 * @since JDK11 */@Log4j2public class ListFilterDataTest {  public static void main(String[] args) {    List list = new ArrayList<>();    list.add("刘德华");    list.add("郭富城");    list.add("张学友");    list.add("黎明");    list.add("张国荣");    list.add("张杰");    List zhangList = new ArrayList<>();    // 将姓张的名字存放到一个新的集合汇总    for (String name : list) {      if (name.startsWith("张")) {        zhangList.add(name);      }    }    List result = new ArrayList<>();    // 将长度大于等于3的名字    for (String name : zhangList) {      if (name.length() >= 3) {        result.add(name);      }    }    log.info("结果:{}", result);    // 只要操作集合都不得不需要使用循环遍历元素    // 每次筛选后都需要使用新的集合存储元素  }}

程序运行结果

d32f469739d9769d494ab8835cbd2ef7.png

使用Stream API操作集合
不需要遍历集合、而且不需要创建新的集合存放结果

package net.ittimeline.java.core.jdk.feature.java8.stream;import lombok.extern.log4j.Log4j2;import java.util.ArrayList;import java.util.List;/** * stream流操作集合数据 * * @author tony 18601767221@163.com * @version 2020/12/25 13:19 * @since JDK11 */@Log4j2public class StreamFilterDataTest {  public static void main(String[] args) {      List list = new ArrayList<>();      list.add("刘德华");      list.add("郭富城");      list.add("张学友");      list.add("黎明");      list.add("张国荣");      list.add("张杰");      list.stream().filter(name->name.startsWith("张")).filter(name->name.length()>=3).forEach(( name)->{          log.info(name);      });  }

程序运行结果

b059111ab98a936a4fd0a59f81182727.png

流式编程思想

流式编程思想来自于工厂的流水线,在使用流之前需要搭建函数模型。例如list.stream().filter(name->name.startsWith("张")).filter(name->name.length()>=3).forEach(( name)->{ log.info(name); });就是函数模型

  • 函数模型必须要有终结的方法,也就是返回值类型不为Stream的方法。例如forEach()方法的返回值就是void
  • 函数模型要有延迟方法,即返回值为Stream的方法,例如stream(),fliter()方法都是延迟方法
  • Stream流不能重复使用
  • Stream流不能存储数据,也不会修改数据源。

获取流的方式

获取流也就是流要有多个数据,而Java中支持存储多个数据的容器是数组或者集合。

JDK1.8以后Collection接口增加了一个默认方法:default S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值