首页 > 其他分享 >Stream-常见方法(上)

Stream-常见方法(上)

时间:2022-08-22 16:39:16浏览次数:57  
标签:name Stream 方法 常见 接口 forEach Consumer

常见方法

 

 

 流模型的操作很丰富,这里介绍一些常用的API,这些方法可以被分成两种:

  • 延迟方法:返回值类型仍然是Stream接口自身类型的方法 因此支持链式调用(除了终结方法外 其余方法均为延迟方法。)
  • 终结方法:返回值类型不再是Stream接口自身类型的方法 因此不再支持类似StringBuilder那样的链式调用 本小节种 终结方法包括count和forEach方法

逐一处理:forEach

虽然方法名字叫forEach 但是与for循环中的for-each昵称不同

void forEach(Consumer<? super T> action);

该方法接收一个Consumer接口函数 会将一个流元素交给该函数进行处理

复习Consumer接口

java.util.function.Consumer<T>接口是一个消费型接口
Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据

代码:

/*
    Stream流中常用方法_forEach
    void forEach(Consumer<? super T> action);
    该方法接收一个Consumer接口函数,会将每一个流元素交给函数进行处理。
    Consumer接口是一个消费型的函数式接口,可以传递Lambda表达式,消费数据

    简单记:
        forEach方法,用来遍历流中的数据
        是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法
 */
public class BStream2 {
    public static void main(String[] args) {
        //获取一个Stream流
        Stream<String> stream = Stream.of("张三","李四","王五","赵六","田七");
        //正常写法
//        stream.forEach((String name)->{
//            System.out.println(name);
//        });
        //使用Lambda表达式优化代码
        stream.forEach(name-> System.out.println(name));
    }
}

过滤:filter

可以通过filter方法将一个流转换成另一个子集流。方法签名:

Stream<T> filter(Predicate<? super T> predicate);

该接口接收一个Predicate函数式接口参数(可以是一个Lambda或方法引用)作为筛选条件

 

 代码:

/*
    Stream流中的常用方法——filter:用于对Stream流中的数据进行过滤
    Stream<T> filter(Predicate<? super T> predicate);
    filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
    Predicate中的抽象方法:
          boolean test(T t);
 */
public class BStream3 {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("张三", "张翠山", "赵敏", "周芷若", "张无忌");
        //对Stream流中的元素进行过滤,只要性张的人
        Stream<String> ms = stream.filter((String name)->{return name.startsWith("张");});
        //遍历输出
        ms.forEach(name-> System.out.println(name));
    }
}

运行结果:

 

 

Stream流的使用特点

Stream流属于管道流 只能被消费(使用)一次

第一个Stream流调用完毕方法 数据就会流转到下一个Stream上

而这时第一个Stream流已经使用完毕 就关闭了

所以第一个Stream流不能再调用方法了

 

标签:name,Stream,方法,常见,接口,forEach,Consumer
From: https://www.cnblogs.com/qihaokuan/p/16612941.html

相关文章

  • 共享USB打印机设置方法
    打印机共享一、准备所有计算机在同一个网段。所有计算机在同一个工作组,组名可以自定义,默认WORKGROUP。使用超级管理员用户,目的是为了激活guest用户。验证之后可......
  • 解决死锁之路 - 常见 SQL 语句的加锁分析
    解决死锁之路-常见SQL语句的加锁分析这篇博客将对一些常见的SQL语句进行加锁分析,看看我们平时执行的那些SQL都会加什么锁。只有对我们所写的SQL语句加锁过程了......
  • JQuery_遍历_for循环、JQuery_遍历2_each方法
    JQuery_遍历_for循环2.遍历1.js的遍历方式*for(初始化值;循环结束条件;步长)2.jq的遍历方式1.jq对象.each(callback)2.$.each(object,[callback])3.for..of: ......
  • 一次跨域请求出现 OPTIONS 请求的问题及解决方法
    浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都属于跨域。前端这边有一个get请求,在请求的header里面要添加两个自定义的header。GEThttp:......
  • Stream流-流式思想概述和获取流
    流式思想概述整体来看,流式思想类似于工厂车间的“生产流水线”。  当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个“模型”......
  • Linux启动Mysql出现command not found的解决方法
    当在Linux中安装Mysql后,不管是在根目录下还是在安装mysql的bin下执行mysql-uroot-p结果都是commandnotfound,如下图所示:问题原因,linux默认启动Mysql,会在根目录下的bin中......
  • [四、Xcode界面]19代码方法块的折叠和展开
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!!......
  • JAVA中子类使用super.getClass()方法
    一般来说,java中调用getClass().getName()这个方法可以获取本类的名称,例如:importjava.util.Date;publicclassTest06extendsDate{publicstaticvoidmain(St......
  • pr2022如何导入.mogrt文件?pr模板的安装方法
    Mogrt格式的模板文件是一种新型的模板格式,因此对Premiere软件版本的要求较高,导致了许多人在使用模板是会出现不知如何导入的问题。现在小编为大家带来具体导入方法。首先,......
  • navicat远程连接mysql报1130错误解决方法
    引用自:https://blog.csdn.net/zqian1994/article/details/124382726  问题数据库安装好了,但是不允许从远程登陆。用Navicat连接数据库时只能通过localhost,使用IP连接......