Java流Stream使用详解(上)

Java流Stream使用详解

  • 体验Stream流的作用

需求:按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素

ArrayList<String> list =new ArrayList<>();

list.add("张无忌");

list.add("周芷若");

list.add("赵敏");

list.add("张强");

list.add("张三丰");

完成如下要求:

1.把所有以“张”开头的元素存储到新集合中

2.把“张”开头的,长度为3的元素再存储到新集合中

3.遍历打印最终结果

实现代码参考:

import java.util.ArrayList;public class StreamFirstTime {public static void main(String[] args) {ArrayList<String> list =new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");/*1.把所有以“张”开头的元素存储到新集合中2.把“张”开头的,长度为3的元素再存储到新集合中3.遍历打印最终结果*//*ArrayList<String> newList = new ArrayList<>();ArrayList<String> newList2 = new ArrayList<>();for (String name : list) {if (name.startsWith("张")){newList.add(name);if (name.length() == 3){newList2.add(name);}}}// 打印for (String name : newList) {System.out.println(name);}System.out.println("==========");// 打印for (String name : newList2) {System.out.println(name);}*/// 使用流进行过滤和打印list.stream().filter(s->s.startsWith("张")).filter(s->s.length() == 3).forEach(s -> System.out.println(s));}
}

  • 流Stream的思想及概念

Stream流相当于流水线,可以进行流式操作。其在使用时一般结合Lambda表达式,简化集合、数组的操作

  • Stream流的使用步骤:

①先得到一条Stream流(流水线),并把数据放上去

②利用Stream流中的API进行各种操作

用途

方法流程名称

区别

过滤

转换

中间方法

方法调用完毕之后,还可以调用其他方法

统计

打印

终结方法

最后一步,调用完毕之后,不能调用其他万法

  • 获取一条流水线Stream,并把数据放上去

获取方式

方法名

说明

单列集合

default Stream<E> stream()

Collection中的默认方法

双列集合

无法直接使用stream流,需要先使用keySet()、entrySet()转换成单列集合才可使用

数组

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

Arrays工具类中的静态方法

一堆零散数据

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

Stream接口中的静态方法(需要是同种数据类型)

单列集合的流水线生成及使用方法:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.stream.Stream;public class StreamDemo2 {public static void main(String[] args) {// 1.单列集合// 获取流:直接使用Collection中的默认方法stream()Collection<String> collection = new ArrayList<>();Collections.addAll(collection,"aaa", "bbb", "ccc");// 默认方法stream()获取流Stream<String> stream = collection.stream();// 使用终结方法打印一下流水线上的所有数据,lambda实现stream.forEach(s -> System.out.println(s));}
}

双列集合的流水线生成及使用方法:

import java.util.HashMap;
import java.util.Map;public class StreamDemo3 {public static void main(String[] args) {// 2. 双列集合使用流// 创建双列集合Map<String, Integer> hm = new HashMap<>();// 添加数据hm.put("一", 1);hm.put("二", 2);hm.put("三", 3);hm.put("四", 4);hm.put("五", 5);// 获取stream流// 双列集合无法直接创建stream流// 需要使用keySet或entrySet转换后才能使用// 打印所有keyhm.keySet().stream().forEach(s -> System.out.println(s));// 打印所有valueshm.values().stream().forEach(i -> System.out.println(i));// entrySet方法,打印所有entryhm.entrySet().stream().forEach(entry -> System.out.println(entry));}
}

数组的stream流用法,Arrays.stream方法:

import java.util.Arrays;public class StreamDemo4 {public static void main(String[] args) {// 3.数组的Stream使用方法// 创建数组int[] arr1 = {1, 2, 3, 4, 5, 6};String[] arr2 = {"a", "b", "c", "d", "e"};// 获取stream流,使用Arrays的stream方法Arrays.stream(arr1).forEach(i -> System.out.println(i));Arrays.stream(arr2).forEach(s -> System.out.println(s));}
}

一堆零散的数据,用Stream.of方法:

import java.util.stream.Stream;public class StreamDemo5 {public static void main(String[] args) {// 一堆零散的数据// 这堆数据需要是同一种类型,否则无法使用stream// 一堆数值Stream.of(1, 2, 3, 4, 5).forEach(i -> System.out.println(i));// 一堆字符串Stream.of("a", "b", "c").forEach(s -> System.out.println(s));}
}
  • Stream.of方法的坑

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

import java.util.stream.Stream;public class StreamDemo6 {public static void main(String[] args) {String[] arr1 = {"一", "二", "三"};int[] arr2 = {1, 2, 3};// 这个打印元素内容Stream.of(arr1).forEach(s -> System.out.println(s));// 这个打印的是地址,因为arr2装的是基本数据类型。可能不是你想要的效果!Stream.of(arr2).forEach(s -> System.out.println(s));/* 本程序输出:* 一* 二* 三* [I@682a0b20*/}
}

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

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

相关文章

Qt配置OpenCV(MSVC编译)

目录 1.准备工具 1.1 Qt&#xff1a;5.14.2 64位 1.2 Opencv&#xff1a;4.6.0 1.3 Visual Studio 2017 2. QtMSVC开发环境搭建 3. 配置环境变量 3.1 Opencv环境变量配置 4. Qt 代码测试 1.准备工具 1.1 Qt&#xff1a;5.14.2 64位 1.2 Opencv&#xff1a;4.6.0 官…

npmmirror 镜像站(国内好用的npm镜像站 cnpm)

npmmirror 镜像站 原淘宝npm域名即将停止解析&#xff0c;请切换至新域名 npmmirror.com http://npm.taobao.org和 http://registry.npm.taobao.org 已经在 2022.06.30 号正式下线和停止 DNS 解析。 新域名为 npmmirror.com, 相关服务域名切换规则请参考&#xff1a; http:/…

1.什么是html

1.什么是html什么是html&#xff1f; 一.基础信息 英文名字&#xff1a;HyperText Markup Language 中文名字&#xff1a;超文本标记语言 简称&#xff1a;html 文件格式&#xff1a;.htm 或 .html 结尾 作用&#xff1a;描述网页的语言。通过各种各样的标签&#xff0c;组…

数据库-PostgreSQL学习笔记

目录 PostgreSQL介绍与安装docker安装腾讯云免费领用1个月 数据库操作连接数据库实例创建数据库查看数据库列表使用数据库删除数据库修改数据库属性 表操作字段类型整数浮点数日期与时间类型字符串类型 DDLCREATEDROPALTER DMLINSERTUPDATEDELETE 查询查询所有数据查询部分列指…

Windows驱动中校验数字签名(使用 ci.dll)

1.背景 对于常规应用程序来说&#xff0c;校验数字签名认证在应用层可以使用 WinVerifyTrust, 在驱动层使用常规的 API无法使用&#xff0c;自己分析数据又太麻烦。 在内核中 ci.dll 包装了数据签名验证相关的功能&#xff0c;我们可以使用该 dll 来实现我们的数字签名验证。 详…

Ubuntu20.24 安装ecCodes,包括 tar.gz 和 python(笔记)

这里写目录标题 动机为此找了解决方案。废话不多说&#xff0c;如下&#xff1a;1. 下载 ecCodes 的源文件&#xff0c;网址如下&#xff1a; https://confluence.ecmwf.int/display/ECC/Releases2. 解压包:3. 创建 ecCodes 的安装目录:4. 通过 cmake 安装 :5. 编译, 测试&…

Siemens-NXUG二次开发-新建与保存prt文件[Python UF][20231204]

Siemens-NXUG二次开发-新建与保存prt文件[Python UF][20231204] 1.python uf函数1.1 NXOpen.UF.Part.New1.2 NXOpen.UF.Part.Save1.3 NXOpen.UF.Ui.OpenListingWindow1.4 NXOpen.UF.Ui.IsListingWindowOpen1.5 NXOpen.UF.Ui.WriteListingWindow1.6 NXOpen.UF.Ui.SaveListingWin…

电气间隙和爬电距离的算法

电气间隙和爬电距离 一、定义 1、电气间隙&#xff1a;不同电位的两个导电部件间最短的空间直线距离。 2、爬电距离&#xff1a;不同电位的两个导电部件之间沿绝缘材料表面的最短距离。 3、隔离距离&#xff08;机械式开关电器一个极的&#xff09;&#xff1a;满足对隔离器…

【重点】【双指针】42. 接雨水

题目 重点题目&#xff0c;深刻理解&#xff01;&#xff01;&#xff01; 解法1&#xff1a;备忘录 O(N) O(N) class Solution {public int trap(int[] height) {int n height.length, res 0;int[] lMax new int[n];int[] rMax new int[n];lMax[0] height[0];rMax[n …

华为手环关闭智能适时测量

问题 使用华为手环并使用华为创新研究APP后&#xff0c;会自动打开智能适时测量开关&#xff0c;此开关开启后&#xff0c;手环会在睡眠时间自动测量血氧&#xff0c;增加手环功耗从而影响续航&#xff0c;用户可根据自身需求决定是否开启&#xff0c;下文介绍如何找到此开关。…

Stable Diffusion 系列教程 - 1 基础准备(针对新手)

使用SD有两种方式&#xff1a; 本地&#xff1a; 显卡要求&#xff1a;硬件环境推荐NVIDIA的具有8G显存的独立显卡&#xff0c;这个显存勉勉强强能摸到门槛。再往下的4G可能面临各种炸显存、炼丹失败、无法生成图片等各种问题。对于8G显存&#xff0c;1.0模型就不行&#xff0…

Google Guava 反射工具使用详解

文章目录 反射类操作方法操作字段操作获取注解 反射 在 Guava 中&#xff0c;反射&#xff08;Reflection&#xff09;模块提供了一些用于简化反射操作的工具类和方法。通过 Guava 的反射模块&#xff0c;您可以方便地进行类、方法、字段的操作、获取注解信息等。下面详细介绍…

洛谷 P9516 color C++代码

目录 前言 思路点拨 AC代码 结尾 前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;color - 洛谷 题目&#xff1a; 思路点拨 这题就是if-else判断输入的五个数据和不就OK了&#xff1f; 在这里我的估值是183&#xff08;截止2023.12.3&#xff09;&#xff0c;热…

Java 中 IO 流分为几种?

Java 中 IO 流分为几种&#xff1f; 在Java中&#xff0c;I/O&#xff08;输入/输出&#xff09;流用于处理输入和输出操作。I/O 流分为两大类&#xff1a;字节流和字符流&#xff0c;每个类别又分为输入流和输出流。 字节流&#xff08;Byte Streams&#xff09;&#xff1a…

【力扣】56. 合并区间

【力扣】56. 合并区间 文章目录 【力扣】56. 合并区间1. 题目介绍2. 解法2.1 方法一&#xff1a;标志位2.2 方法二&#xff1a;排序 遍历 3. Danger参考 1. 题目介绍 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合…

Linux系统配置深度学习环境之cudnn安装

前言 一个针对深度学习应用优化的 GPU 加速库。它提供了高性能、高可靠性的加速算法&#xff0c;旨在加速深度神经网络模型的训练和推理过程。 cuDNN 提供了一系列优化的基本算法和函数&#xff0c;包括卷积、池化、规范化、激活函数等&#xff0c;以及针对深度学习任务的高级功…

移动平均滤波的原理和C代码

移动平均滤波是一种简单有效的平滑信号的方法&#xff0c;它通过计算一系列数据点的平均值来减小信号中的波动。基本的移动平均滤波方法有两种&#xff1a;简单移动平均&#xff08;SMA&#xff09;和指数加权移动平均&#xff08;EWMA&#xff09;。 简单移动平均滤波&#xf…

Go读取yaml文件,struct返回,json输出

程序模块中&#xff0c;缺少不了一些配置定义&#xff0c;这时定义yaml是个很好的选择 先定义yaml文件内容&#xff0c;文件名为&#xff1a;task_status_config.yaml confs:#阅读类任务&#xff0c;即提醒任务read:name: readawait: #待开始任务status_id: 0ing: #进行中任务…

基于直流微电网的光伏并网功率转换装置设计与运行仿真

摘要 微电网是目前国内外应用较为广泛的一种绿色可再生能源&#xff0c;近几年我国微电网产业的发展十分迅速。然后&#xff0c;越来越多的微电网系统建立并网&#xff0c;微电网产生的电能受外界因素影响较大&#xff0c;具有一定的随机性和波动性&#xff0c;给并网后的电力系…

高通410随身wifi编译安装Asterisk(chan_mobile)搭建内网voip系统

前几天写了教程在ubuntu上搭建Asterisk,成功在内网打通了SIP通话。 ubuntu是18.04,安装的虚拟机系统;最近手头的斐讯的N1,Armbian系统,以及高通410的Debian系统,就是ubuntu内核,所以理论上应该也可以安装Asterisk;在这之前在openwrt上研究了一周多,Asterisk是跑起来了…