Java新特性Stream流详解

一、概述

Stream流是Java 8
API添加的一个新的抽象,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)。

Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。

二、如何使用Stream流?
1.创建Stream流。
(1)Stream创建。

Stream<String> stream1 = Stream.of("one","two");

(2) Collection集合创建。

List<String> list = Arrays.asList("one","two");
Stream<String> stream = list.stream(); // 串行Stream
Stream<String> parallelStream = list.parallelStream(); // 并行Stream

(3)Array数组创建

String[] strArr = {"one","two"};Stream arrayStream = Arrays.stream(strArr);

(4) 文件创建

try {Stream<String> fileStream = Files.lines(Paths.get("file.txt"), Charset.defaultCharset());} catch (IOException e) {e.printStackTrace();}

(5) 函数创建
generator:


Stream<String> stream = Stream.generate(()->"a").limit(2);

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

iterator:

Stream<Integer> iterateStream = Stream.iterate(0, s -> s + 2).limit(3);

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

2.操作Stream。
常用的Stream操作包括:过滤、映射、排序、去重、计数、归约等等。
filter:
过滤方法filter用于对Stream中的元素进行筛选,只保留符合指定条件的元素,如下:

List<String> list = Arrays.asList("one","two","three");
Stream<String> stream = list.stream().filter(s -> s.length() > 3);

map:使用map方法可以将流中的元素映射到另一个值。例如,将一个字符串列表中的元素转换为大写:

List<String> names = Arrays.asList("one","two","three");
List<String> upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());

sorted:使用sorted方法可以对流中的元素进行排序。例如,对一个整数列表进行升序排序:

List<Integer> numbers = Arrays.asList(1, 3, 5, 1, 7);
List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList());

distinct: distinct用于将Stream中的重复元素去除,只保留一个:

List<Integer> numbers = Arrays.asList(2, 7, 1, 1, 7);
List<Integer> sortedNumbers = numbers.stream().distinct().collect(Collectors.toList());

count: 计数方法count用于返回Stream中元素的数量,返回值为long类型。

List<String> list = Arrays.asList("one","two","three");
long count = list.stream().count();

reduce: reduce用于将Stream中的元素归约成一个值,例如求和、求最大值等。例如,计算一个整数列表的总和:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);

forEach: forEach方法用于对Stream中的每个元素执行指定的操作。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().forEach(System.out::println);

collect:使用collect方法可以将流中的元素收集到一个集合中。例如,将一个字符串列表中的元素收集到一个新的列表中:

List<String> names = Arrays.asList("one","two","three");
List<String> collectedNames = names.stream().collect(Collectors.toList());

总结:
Stream是Java 8中非常重要的一个API,本文详细介绍了Java Stream流的概念、使用方法。通过Stream流,开发人员可以以声明式的方式对数据进行操作,使代码更加简洁、易读。我们还介绍了Stream流的常用操作方法使用
通过充分利用Stream流的特性和优势,开发人员可以编写更加优雅、高效的数据处理代码。

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

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

相关文章

论文阅读:CenterFormer: Center-based Transformer for 3D Object Detection

目录 概要 Motivation 整体架构流程 技术细节 Multi-scale Center Proposal Network Multi-scale Center Transformer Decoder Multi-frame CenterFormer 小结 论文地址&#xff1a;[2209.05588] CenterFormer: Center-based Transformer for 3D Object Detection (arx…

WSL Ubuntu 22.04.2 LTS 安装paddle踩坑日记

使用conda安装paddlepaddle-gpu: conda install paddlepaddle-gpu2.5.1 cudatoolkit11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge 等待安装... 报错处理&#xff1a; (1)(1)PreconditionNotMetError: Cannot load cudnn shared libr…

原子性操作

原子性操作是指一个操作在执行过程中不会被中断&#xff0c;要么全部执行成功&#xff0c;要么全部不执行&#xff0c;不会出现部分执行的情况。原子性操作对于多线程并发编程至关重要&#xff0c;因为它可以确保多个线程之间不会出现竞态条件或数据不一致性。 在计算机科学中…

205、使用消息队列实现 RPC(远程过程调用)模型的 服务器端 和 客户端

目录 ★ RPC模型&#xff08;远程过程调用通信模型&#xff09;▲ 完整过程&#xff1a;代码演示总体流程解释&#xff1a;ConstantUtil 常量工具类ConnectionUtil RabbitMQ连接工具类Server 服务端Client 客户端测试结果服务端客户端 完整代码ConstantUtil 常量工具类Connecti…

AMD AFMF不但能用在游戏,也适用于视频

近期AMD发布了AMD Software Adrenalin Edition预览版驱动程序&#xff0c;增加了对平滑移动帧&#xff08;AMD Fluid Motion Frames&#xff0c;AFMF&#xff09;功能的支持&#xff0c;也就是AMD的“帧生成”技术&#xff0c;与DLSS 3类似&#xff0c;作为FidelityFX Super Re…

137. 只出现一次的数字 II

题目 题解 方法一 直接用 哈希表出现 3 次则从 哈希表移除&#xff0c;最后剩下的就是结果 class Solution { public int singleNumber(int[] nums) { Map<Integer, Integer> map new HashMap<>(); for (int num : nums) { Integer i…

React添加文件路径时使用@符号代替src目录(非creae-react-app)

在其它项目中看到的可以用符号来代替src目录&#xff0c;那么在自己的react项目中也必须得尝试一下。本人的项目不是通过create-react-app脚手架来创建的&#xff0c;无法使用craco或者的方案来实现。 jsconfig.json配置 用的vscode进行开发&#xff0c;查看项目当中是否存在js…

css 如何让元素内部文本和外部文本 一块显示省略号

实际上还是有这样的需求的 <div class"container"><span>啊啊啊啊啊啊啊啊</span>你好啊撒撒啊撒撒撒撒啊撒撒撒撒撒说</div>还是有这样的需求的哦。 div.container {width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow:…

【AI视野·今日Robot 机器人论文速览 第五十期】Mon, 9 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 9 Oct 2023 Totally 25 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Learning to Grasp: from Somewhere to Anywhere Authors Fran ois H l non, Johann Huber, Fa z Ben Amar, St phane Doncieux…

Linux中的nmap命令

nmap&#xff08;Network Mapper&#xff09;是一个开源的网络扫描和安全审计工具&#xff0c;它被设计为用于发现设备在网络上运行并确定其开放的网络端口。该工具常用于网络安全实践和网络管理任务&#xff0c;例如检查开放的网络端口&#xff0c;检测网络服务及其版本&#…

代理技术的崭新纪元:Socks5代理和代理IP的多重应用

在当今数字化的时代&#xff0c;网络工程师成为了技术的舵手&#xff0c;引领着企业应对跨界电商、爬虫、出海业务、网络安全和游戏等各种挑战。而Socks5代理和代理IP技术&#xff0c;则如同一双翅膀&#xff0c;为网络工程师提供了多重应用的动力。本文将深入探讨这两项代理技…

ubuntu 18.04 网口连接镭神C16 雷达环境配置

前面的参看转载 &#xff0c;最后两步重启网络配置 较新的 Ubuntu 版本Ubuntu 18.04 及更高版本中重新启动网络服务的命令&#xff1a; 重启 NetworkManager $&#xff1a;sudo systemctl restart NetworkManager重启 systemd-networkd $:sudo systemctl restart systemd-n…

【Java 进阶篇】JavaScript DOM 编程:理解文档对象模型

在 web 开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是一个重要的概念。DOM 是一种将网页文档表示为树状结构的方式&#xff0c;允许开发者使用 JavaScript 来访问和操作网页的内容。本篇博客将详细介绍 DOM&#xff0c;包括什么是 DOM、如何访问 DOM 元素、如何…

ESP8285 RTOS SDK OTA

一、官方资源说明 官方指南&#xff1a;空中升级 (OTA) - ESP32 - — ESP-IDF 编程指南 v4.3.6 文档&#xff0c;虽然是正对ESP32的&#xff0c;但是原理是一样的。 官方参考例程&#xff1a;esp-idf\ESP8266_RTOS_SDK\examples\system\ota\&#xff0c;其中包含两个例程&…

Pulsar-Schema 数据结构

Pulsar-Schema 数据结构 为什么需要使用Schema&#xff1f;怎么使用&#xff1f;生产者端消费者端使用用例Schema定义Schema类型基本类型复合类型KeyValue schemaStruct schemaPulsar提供了以下方法来使用结构模式staticgeneric 自动SchemaSchema验证实施Schema演化Schema版本控…

生物标志物发现中的无偏数据分析策略

目录 0. 导论基本概念 1. 生物标志物发现的注意事项2. 数据预处理2.1 高质量原始数据和缺失值处理2.2 数据过滤2.3 数据归一化 3. 数据质量评估3.1 混杂因素3.2 类别分离3.3 功效分析3.4 批次效应 4. 生物标志物发现4.1 策略4.2 数据分析工具4.3 模型优化策略 0. 导论 组学技术…

【具身智能模型1】PaLM-E: An Embodied Multimodal Language Model

论文标题&#xff1a;PaLM-E: An Embodied Multimodal Language Model 论文作者&#xff1a;Danny Driess, Fei Xia, Mehdi S. M. Sajjadi, Corey Lynch, Aakanksha Chowdhery, Brian Ichter, Ayzaan Wahid, Jonathan Tompson, Quan Vuong, Tianhe Yu, Wenlong Huang, Yevgen C…

10.2手动推导linux中file, cdev, inode之间的关系

是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…

SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型

文章目录 摘要1、简介2、相关研究3、方法3.1、注意力模块概述3.2、高效的加性注意力3.3、SwiftFormer 架构4、实验4.1、实现细节4.2、基线比较4.3、图像分类4.4、目标检测和实例分割4.5、语义分割5、结论6、补充材料A、SwiftFormer的架构细节B、其他实现细节C、额外消融D、COCO…

VS2022新建项目时没有ASP.NET Web应用程序 (.NET Framework)

问题&#xff1a;如图&#xff0c;VS2022新建项目时没有“ASP.NET Web应用程序 &#xff08;.NET Framework&#xff09;”的选项解决方法&#xff1a;点击跳转至修改安装选项界面选择安装该项即可&#xff1a;