首页 > 其他分享 >Stream流中的常用方法_forEach和Stream流中的filter方法

Stream流中的常用方法_forEach和Stream流中的filter方法

时间:2022-09-26 13:57:55浏览次数:43  
标签:name Stream 流中 filter forEach 方法

流模型的操作很丰富,这里介绍一些常用的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 Demo02Stream_forEach {
    public static void main(String[] args) {
        //获取一个Stream流
        Stream<String>stream=Stream.of("张三","李四","王五","薛强");
        //使用Stream流中的方法forEach对Stream流中的数据进行遍历
        /* stream.forEach((String name)->{
            System.out.println(name);
        });*/
        stream.forEach(name-> System.out.println(name));
    }
}

 

过滤:filter

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

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

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

复习Predicate接口

此前我们已经学习过java.util.stream.Predicate 函数式接口,其中唯一的抽象方法为:

boolean test(T t);

该方法将会产生一个boolean值结果,代表指定的条件是否满足。如果结果为true,那么Stream流的filter 方法
将会留用元素;如果结果为false,那么filter 方法将会舍弃元素

 

/**
 * Stream流中的常用方法_filter:用于对Stream流中的数据进行过滤
 *     Stream<T> filter(Predicate<? super T> predicate);
 *     filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
 *     Predicate中的抽象方法:
 *         boolean test(T t);
 */
public class Demo03Stream_filter {
    public static void main(String[] args) {
        //创建一个Stream流
        Stream<String> stream = Stream.of("张三丰", "武媚娘", "王昭君", "妲己");
        //对Stream流中的元素进行过滤,只要姓张的人
        Stream<String> stream2 = stream.filter((String name) -> {
            return name.startsWith("张");
        });
        //遍历stream2流
        stream2.forEach(name-> System.out.println(name));

        /**
         * Stream流的特点:只能使用一次
         *
         * Stream流属于管道流,只能被消费(使用)一次
         *             第一个Stream流调用完毕方法,数据就会流转到下一个Stream上
         *             而这时第一个Stream流已经使用完毕,就会关闭了
         *             所以第一个Stream流就不能再调用方法了
         *             IllegalStateException: stream has already been operated upon or closed
         */
        stream.forEach(name-> System.out.println(name));
    }
}

 

标签:name,Stream,流中,filter,forEach,方法
From: https://www.cnblogs.com/xuche/p/16730547.html

相关文章

  • 两种获取Stream流的方式
    所有的Collection集合都可以通过stream默认方法获取流Stream接口的静态方法of可以获取数组对应的流publicstaticvoidmain(String[]args){//把集合转换为S......
  • 使用Stream流的方式.遍历集合.对集合中的数据进行过滤
    Stream的更优写法/***使用Stream流的方式,遍历集合,对集合中的数据进行过滤*Stream流是JDK1.8之后出现的*关注的是做什么,而不是怎么做*/publiccl......
  • [hystrix] hystrix-dashboard 关于 Unable to connect to Command Metric Stream 的问
    问题在hystrix-dashboard界面中出现以下错误解决方法高版本(具体哪些版本之后我不知道,加上去试试)springcloud需要加以下配置(在被监控一端):@Configurationpubli......
  • Java8Stream流
    Stream流呢,以前我也有所了解,像一些面试题中也出现过,Java8的新特性,有一块就是这个Stream操作集合,而且在看一些项目中也使用的比较多。但总感觉自己学的一知半解,所以今天打......
  • 练习-集合元素处理传统方式和Stream方式
    练习-集合元素处理(传统方式)练习:集合元素处理(传统方式)现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行以下......
  • Stream流中的常用方法skip和concat
    Stream流中的常用方法skipStream流中的常用方法_skip:用于跳过元素如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流:Stream<T>skip(longn);......
  • Stream流中的常用方法limit和count
    Stream流中的常用方法limitStream流中的常用方法_count:用于统计Stream流中元素的个数longcount();count方法是一个终结方法,返回值是一个long类型的整数所以......
  • 吃透JAVA的Stream流操作,多年实践总结
    在JAVA中,涉及到对数组、Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。例如,现在有这么一个需求:从给定句子......
  • Filter、FilterChain、FilterConfig 介绍
    一、Filter的基本工作原理1、Filter程序是一个实现了特殊接口的Java类,与Servlet类似,也是由Servlet容器进行调用和执行的。2、当在web.xml注册了一个Filter......
  • SAP Spartacus 产品搜索页面结果里的 filter 设计明细
    我们打开Spartacus主页,输入产品名称进行搜索之后,从结果页面能看到这种filter:默认有9个filter,可以通过单击来展开或者折叠。本文介绍其设计原理。selector:cx-pro......