首页 > 其他分享 >Stream流

Stream流

时间:2024-06-07 12:30:17浏览次数:17  
标签:name Stream 流中 数组 集合 public

目录

Stream流的作用

Stream流的使用步骤:

获取Stream流: 

单列集合

双列集合

数组

一堆零散的数组

Stream流的中间方法

filter过滤

limit获取前几个元素

 skip跳过前几个元素 

distinct 元素去重,依赖(hashcode和equal法) 

concat(Stream a, Stream b)     合并a和b两个流为一个流

map转换流中的数据类型 

Stream流的终结方法

forEach遍历 

count()统计 

 toArray() 收集流中的数据,放到数组中

 collect(Collector collector)                收集流中的数据,放到集合中(list,set,map) 

练习 

一、定义一个集合,并添加一些数 1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数。并将结果保存起来

 二、创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄"zhangsan,23""lisi,24""wangwu,25”保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值

三、现在有两个ArrayList集合第一个集合中:存储6名男演员的名字和年龄。第二个集合中:存储6名女演员的名字和年龄。姓名和年龄中间用逗号隔开。比如:张三,23要求完成如下的操作:1,男演员只要名字为2个字的前两人2,女演员只要姓赵的,并且不要第一个3,把过滤后的男演员姓名和女演员姓名合并到一起4,将上一步的演员信息封装成Actor对象,5,将所有的演员对象都保存到List集合中备注:演员类Actor,属性有:name,age


在Java中,Stream流是一种用于处理数据的抽象概念。它可以用来操作集合、数组、输入/输出资源等,提供了一种统一的处理方式。

在Java 8中引入了Stream API,它可以让开发者更方便地处理数据集合,以函数式编程的方式进行操作。Stream流支持多种操作,可以分为两类:中间操作和终端操作。

中间操作是指在数据流中进行处理,可以用来过滤、映射、排序等操作。常用的中间操作有:filter、map、sorted等。

终端操作是指对数据流进行最终的处理,可以用来收集、计数、求和等操作。常用的终端操作有:collect、count、sum等。

Stream流的作用

结合了Lambda表达式,简化集合、数组的操作

Stream流的使用步骤:

 先得到一条Stream流(流水线),并把数据放上去,再利用Stream流中的API进行各种操作 

获取Stream流: 

单列集合

方法名: 

default Stream<E>stream() 

collection中的默认方法

 

完整代码在这里

public class StreamDemo {
    public static void main(String[] args) {
        ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"a","b","c","d","e");
        //获取到一条流水线,并把集合中的数据放到流水线上
        Stream<String> stream1 = list.stream();
        //使用终结方法打印一下流水线上的所有数据
        stream1.forEach(s -> System.out.println(s));

    }
}

双列集合

无法直接使用Stream流

可以先用keyset方法获取所有的键,再获取Stream流

也可以使用entryset方法获取所有的键值对对象,在获取Stream流

数组

方法名: 

public static <T> Stream<T> stream(T[] array)  

Arrays工具类中的静态方法 

完整代码在这里 

public class StreamDemo3 {
    public static void main(String[] args) {
        int[]arr={1,2,3,4,5};
        Arrays.stream(arr).forEach(s-> System.out.println(s));
    }
}

一堆零散的数组

方法名: 

public static<T> stream<T> of(T... values) 

Stream接口中的静态方法

 

注意: 

Stream接口中静态方法of的细节:方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组但是数组必须是引用数类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到stream当中。

基本数据类型:

引用数据类型: 

Stream流的中间方法

Stream<T>filter(Predicate<? super T> predicate)         过滤

Stream<T>limit(long maxSize)                                      获取前几个元素   

Stream<T> skip(long n)                                                跳过前几个元素

Stream<T> distinct()                                                     元素去重,依赖(hashcode和equal法)

static <T>Stream<T>concat(Stream a, Stream b)       合并a和b两个流为一个流

Stream<R> map(Function<T ,R> mapper)                  转换流中的数据类型

注意: 

中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程

修改Stream流中的数据,不会影响原来集合或者数组中的数据

filter过滤

练习: 把“张”开头的留下,其余数据过滤不要

上面是拿匿名内部类写的,可以用Lambda表达式简化一下

标签:name,Stream,流中,数组,集合,public
From: https://blog.csdn.net/m0_46702681/article/details/138816982

相关文章

  • 每日AIGC最新进展(21):清华大学提出从人体运动和视频中理解人类行为MotionLLM、武汉大
    DiffusionModels专栏文章汇总:入门与实战MotionLLM:UnderstandingHumanBehaviorsfromHumanMotionsandVideos本研究提出了一种名为MotionLLM的新型框架,旨在通过结合视频和运动序列(如SMPL序列)的多模态数据,利用大型语言模型(LLMs)的能力来理解人类行为。与以往只针对视......
  • Centos Stream 10 测试版下载:未来的RHEL10&Rocky Linux 10
    简介最近发现Centos最放出了Stream10测试版本,应该是基于Fedora40构建的。未来红帽会基于此版本构建RHEL10。内核版本:6.9.0Python版本:3.12.2RHEL系发行版对应关系Fedora(根发行版-软件实时更新-只支持一年)>>某一版本作为基准版本⏬CentosStream(长期稳定发行版-软......
  • 简化stream流等工具类(函数式编程的应用案例)
    操作集合publicclassCollectionUtils{publicstaticbooleancontainsAny(Objectsource,Object...targets){returnasList(targets).contains(source);}publicstaticbooleanisAnyEmpty(Collection<?>...collections){retu......
  • ParallelStream
    目录前言认识和开启并行流测试并行流的性能并行流可以随便用吗?可拆分性影响流的速度共享变量修改的问题并行流的使用注意前言在Java7之前,如果想要并行处理一个集合,我们需要以下几步手动分成几部分为每部分创建线程在适当的时候合并并且还需要关注多个线程之间共......
  • Python应用开发——Streamlit 创建多页面应用程序进行APP的构建
    创建多页面应用程序在附加功能中,我们介绍了多页面应用程序,包括如何定义页面、构建和运行多页面应用程序,以及如何在用户界面的页面间导航。更多详情,请参阅多页面应用程序指南Multipageapps-StreamlitDocs在本指南中,让我们通过将上一版本的streamlithello应用程序转换为......
  • 解决php因为输出内容太短无法流式(Stream)输出问题
    实测得知,如果用PHP做流式输出每次echo的内容太短的话,就没有流式的效果了,而是会等输出的长度达到一定时前端才能拿到结果,如下:  这是我这边的测试结果,可见,这里仅接收到了两次流式输出,但是我在PHP里是输出了10次,从而证明了每次流式的内容达到一定长度时才能有流式得到效果,这个......
  • 新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算
    传统程序员4大本领:泛型,枚举,反射,注解新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算lambda表达式//1.不需要参数,返回值为5()->5//2.接收一个参数(数字类型),返回其2倍的值x->2*x//3.接受2个参数(数字),并返回他们的差值(x,y)->x......
  • CentOS Linux 8x 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare interna
    问题描述今天安装CentOS8.5安装完之后,准备更新源仓库环境的时候突然出现错误:为仓库'appstream'下载元数据失败:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist,后面我找了好久没发现有解决这个问题的方法,后面无意看到了https://www.cnblogs.com/cainiaoaixuexi......
  • JAVAEE之文件IO_数据流概念,字节流:InputStream、OutputStream,字符流:reader、writer,及实
    什么是数据流 顾名思义,I表示input,O表示output,也就是输入输出流,主要是在程序与文件之间,用于传输数据的通道。既然要传输数据,那么我们需要理解文件和程序之间哪种方向的传输是输入流,哪种传输作为输出流?我们可以举一个例子,如下图所示: IO流是JavaIO中的核心概念。流......
  • python前端streamlit模型部署
    简单介绍使用前端streamlit框架快速部署本地模型:1、模型训练:importpandasaspd#流程整合fromsklearn.pipelineimportmake_pipeline,Pipeline#数据处理fromsklearn.imputeimportSimpleImputerfromsklearn.preprocessingimportMinMaxScaler,StandardSca......