Java中的Stream流常用接口和方法

​@TOC

第一章:Stream流是什么

1.1)简单介绍

学习Stream流就绕不开Lambda表达式,

需要了解Lambda表达式可以看一下这篇–>:Lambda表达式学习

1.其实“流”是个抽象概念,我们把现实世界中与Stream流有相同特性的东西也称为“流”,比如水流,流水线。流的思想就像工厂中的“生产流水线”,将集合或数组中的元素当做流水线上的产品进行操作。

2.既然是操作计算数据那么这些数据的源头是什么?可以是数组、文件、集合、函数。注意:Stream流不保存数据,不是容器。更贴切的比喻是流水线,产品只是经过流水线而不保存在流水线上。

1.2)创建流的五种方式

①直接用方法创建

Stream s = Stream.of(1,2,3,4,5,6,7);

②根据集合创建

//创建集合
ArrayList<String> list = new ArrayList<>();
//添加元素
Collections.addAll(list,"张三","李四","张五极","张六六","张七八九");//流对象创建
Stream<String> lisStream = list.Stream();

③根据数组,要注意数组存储的数据类型,这里生成的流是数值流。mapToInt、mapToDouble、mapToLong可以将对象流转换成对应的数值流,而boxed方法可以把数值流转换为对象流。

int[] intArr = {1,2,3,4,56};// 因为是int数组  所以变成了IntStream 
IntStream arrayStream = Arrays.stream(intArr);

④根据文件,通过Files.line方法,得到的每个流是给定文件中的一行

//这个是我百度的
try {Stream<String> fileStream = Files.lines(Paths.get("data.txt"), Charset.defaultCharset());} catch (IOException e) {e.printStackTrace();}

⑤函数创建

第一种函数iterate

方法接受两个参数,第一个为初始化值,第二个为进行的函数操作,因为iterator生成的流为无限流,通过limit方法对流进行了截断,只生成5个偶数

第二种函数generate

generate方法接受一个参数,方法参数类型为Supplier ,由它为流提供值。generate生成的流也是无限流,因此通过limit对流进行了截断

//第一种iterate
Stream<Integer> iterateStream = Stream.iterate(0, n -> n + 2).limit(5);//第二种generate
Stream<Double> generateStream = Stream.generate(() -> Math.random()).limit(5);

第二章、Stream流的应用

Java8中提供了方便的一些流操作(比如过滤、排序之类的),从应用中体会Stream流,从案例中了解它的特点和应用场景

2.1)Stream流中的函数式接口Predicate

1.使用Stream流操作集合中的数据,创建集合后创建流对象

//创建集合
ArrayList<String> list = new ArrayList<>();
//添加元素
Collections.addAll(list,"张三","李四","张五极","张六六","张七八九");//流对象创建
Stream<String> lisStream = list.Stream();

2.使用filter()方法,参数是函数式接口Predicate,所以可以使用Lambda表达式(不会的可以看文章开头有提到),方法介绍如下:

filter​(Predicate<? super T> predicate) 返回由与此给定谓词匹配的此流的元素组成的流Stream<T> 。

//创建流对象Stream<String> stream = list.stream();
//筛选所有姓张的人,并返回满足此条件的元素组成的流Stream<String> stream1 = stream.filter(name -> name.startsWith("张"));
//筛选姓名长度为3个字符的人,并返回满足此条件的元素组成的流Stream<String> stream2 = stream1.filter(name -> name.length() == 3);
//打印,forEach​(Consumer<? super T> action) 方法,对此流的每个元素执行操作。stream2.forEach(name -> System.out.println(name));

​​运行结果:
​​​
​​​​​​在这里插入图片描述

2.2)Stream流中的函数式接口Supplier

1.自定义方法 getDemo() ,传入的参数是函数式接口Supplier,使用getDemo方法时使用匿名内部类的写法,重写get()方法。

//java.util.function.Supplier<T>:生产型接口,代表结果供应商。
//(这里看着很绕,其实就是说不给参数也会给你一个结果)
//抽象方法T get​() 获得结果。public static void main(String[] args) {//匿名内部类,重写get()方法getDemo(new Supplier<String>() {@Overridepublic String get() {return "hello world";}});// lambdagetDemo(()->{ return "HELLO WORLD";});}//自定义方法 getDemo() ,传入的参数是函数式接口Supplierpublic static void getDemo(Supplier<String> supplier){String s = supplier.get();System.out.println("s = " + s);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/801088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一条SQL查询语句的执行顺序

SQL常用字段书写顺序 SELECT&#xff1a;选择要查询的列。 FROM&#xff1a;指定数据来源&#xff0c;即表名。 JOIN&#xff1a;根据指定的连接条件将多个表连接在一起。 ON&#xff1a;指定连接条件&#xff0c;即哪些列的值匹配时&#xff0c;应该将两个表中的行组合在一起。…

【Angular】什么是Angular中的APP_BASE_HREF

1 概述: 在这篇文章中&#xff0c;我们将看到Angular 10中的APP_BASE_HREF是什么以及如何使用它。 APP_BASE_HREF为当前页面的基础href返回一个预定义的DI标记。 APP_BASE_HREF是应该被保留的URL前缀。 2 语法: provide: APP_BASE_HREF, useValue: /gfgapp3 步骤: 在app.m…

SAP ERP 公有云有哪些模块?

随着全球化竞争的加剧和企业管理需求的日益复杂化&#xff0c;越来越多的企业开始采用云端企业资源计划&#xff08;ERP&#xff09;系统来优化业务流程。SAP ERP 公有云&#xff08;SAP S/4HANA Cloud, public edition&#xff09;作为一款领先的云端ERP解决方案&#xff0c;为…

不要再使用 @Builder 注解了!有深坑呀!

曾经&#xff0c;我在《千万不要再随便使用 lombok 的 Builder 了&#xff01;》 一文中提到 Builder 注解的其中一个大坑会导致默认值失效&#xff01; 最近阅读了 《Oh !! Stop using Builder》 发现 Builder 的问题还不止一个&#xff0c;Builder 会让人误以为是遵循构建器…

掌握Linux虚拟网络设备:从基础到应用的全面指南

在现代计算环境中&#xff0c;尤其是云计算☁️、容器化&#x1f4e6;和微服务架构&#x1f3d7;️大行其道的时代&#xff0c;了解和掌握Linux虚拟网络设备变得极为重要。本文将深入探讨Linux虚拟网络设备的世界&#xff0c;带你了解它们是什么、包含哪些类型、为什么需要它们…

揭秘淘宝商品详情数据接口(Taobao.item_get)

淘宝商品详情数据接口&#xff08;Taobao.item_get&#xff09;是一种允许开发者通过API访问淘宝平台上的商品详情信息的接口。通过该接口&#xff0c;开发者可以获取到商品的标题、价格、销量、描述等详细信息&#xff0c;为商品展示和销售提供数据支持。 请求示例&#xff0…

K8s学习八(配置与存储_配置)

配置与存储 配置管理 ConfigMap ConfigMap的创建 一般用于去存储 Pod 中应用所需的一些配置信息&#xff0c;或者环境变量&#xff0c;将配置于 Pod 分开&#xff0c;避免应为修改配置导致还需要重新构建 镜像与容器。configmap缩写为cmkubectl create cm -h来查看创建命令…

三星:HBM4的16层堆叠技术验证成功

随着人工智能、大数据分析、云计算及高端图形处理等领域对高速、高带宽存储需求的激增&#xff0c;下一代高带宽内存&#xff08;High Bandwidth Memory, HBM&#xff09;——HBM4已成为全球存储芯片巨头三星、SK海力士和美光竞相追逐的技术高地。 随着AI、机器学习以及高性能…

【JavaWeb】Day38.MySQL概述——数据库设计-DQL

数据库设计——DQL 介绍 DQL英文全称是Data Query Language(数据查询语言)&#xff0c;用来查询数据库表中的记录。 查询关键字&#xff1a;SELECT 查询操作是所有SQL语句当中最为常见&#xff0c;也是最为重要的操作。在一个正常的业务系统中&#xff0c;查询操作的使用频次…

kafka(四)——生产者流程分析(c++)

前言 kafka生产者负责将数据发布到kafka集群的主题&#xff1b;kafka生产者消息发送方式有两种&#xff1a; 同步发送异步回调发送 流程 流程说明&#xff1a; Kafka Producer整体可看作是一个异步处理操作&#xff1b;消息发送过程中涉及两个线程&#xff1a;main线程和se…

Java变量详解

​ 这里写目录标题 第一章、Java中的变量分类1.1&#xff09;变量分类1.2&#xff09;成员变量分类1.3&#xff09;成员变量和局部变量的区别 第二章、成员变量详解2.1&#xff09;成员变量作用域/权限修饰符2.2&#xff09;成员变量和成员属性的区别2.3&#xff09;成员变量初…

为什么 GraphQL 是构建微服务的更好选择

关于使用REST还是GraphQL来构建微服务哪个更好&#xff0c;一直存在争论。这两种技术都有其支持者和批评者&#xff0c;但当涉及微服务架构的特定需求时&#xff0c;GraphQL 成为明显的领先者。原因如下。 了解 RESTful 的关注点 虽然 REST 多年来一直是首选 API 风格&#x…

蓝桥杯 历届真题 时间显示【第十二届】【省赛】【C组】

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s #include<bits/stdc.h> #define int long long using namespace std; const int N 1e510; int n,m,t,d; int a[2][N],b[N]; //…

数据库关系模式三元及以上分解无损连接判断(表格法)

例题 1.首先构造初始表&#xff0c;如下表所示。 A B C D E ABC a1 a2 a3 b14 b15 CD b21 b22 a3 a4 b15 DE b31 b32 b33 a4 a5 2.遍历函数依赖&#xff0c;对AB→C&#xff0c;因各元组的第一、二列没有相同的分量&#xff0c;所以表不改变。 3.由C→D…

chabot项目介绍

项目介绍 整体的目录如下所示&#xff1a; 上述的项目结构中出了model是必须的外&#xff0c;其他的都可以根据训练的代码参数传入进行调整&#xff0c;有些不需要一定存在data train.pkl:对原始训练语料进行tokenize之后的文件,存储一个list对象&#xff0c;list的每条数据表…

javaWeb物流信息网的设计与实现

摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好&…

【java基础-高级篇十】、注解

自定义目录 一、什么是注解二、常见的注解示例三、自定义 annotation四、JDK 中的元注解五、利用反射获取注解信息六、jdk8之后注解的新特性1、可重复注解2、类型注解 一、什么是注解 加在包,类, 构造器, 方法, 成员变量, 参数, 局部变量声明上面的特殊标记就称为注解未来的开…

力扣2- 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

vmware和ubuntu的问题与解决

1.问题与对策 最近使用vmware安装ubuntu16和ubuntu20&#xff0c;遇到了挺多的问题&#xff0c;如下 ubuntu在用过多次后&#xff0c;重启后登录用户名后会出现花屏的现象。 解决方案如下 在键盘上同时按键&#xff1a;Ctrl Alt F4&#xff0c;进入命令行模式&#xff0c;…

基于深度学习的电动自行车头盔佩戴检测系统

文章目录 1. 文档说明2. 运行环境说明2.1 硬件配置2.2 软件配置2.3 程序依赖库 3. 基本环境配置3.1 软件安装3.1.1 集成开发环境安装与配置3.1.2 数据库安装与配置3.1.3 编程语言安装3.1.4 CUDA和cuDNN安装与配置3.1.5 机器学习库安装 3.2 依赖库安装 4. 运行程序资源下载地 1.…