JAVA8 Stream API 使用详解
Java 8 引入了 Stream API,它提供了对集合对象进行一系列操作的新方式,包括筛选、转换、聚合等。Stream API 的设计目标是提供一种高效且易于使用的处理集合数据的方式,同时支持并行处理。
以下是 Java 8 Stream API 的一些核心概念和使用详解:
1. 创建 Stream
可以通过多种方式创建 Stream:
• 从集合或数组创建:使用 Collection.stream() 或 Arrays.stream()。
• 从值创建:使用 Stream.of()。
• 使用 Stream 的静态方法:如 Stream.empty() 创建一个空的 Stream,Stream.iterate() 和 Stream.generate() 创建无限 Stream。
2. 中间操作(Intermediate Operations)
这些操作会返回一个新的 Stream,可以进行链式操作:
• filter:根据条件过滤元素。
• map:将流中的每个元素映射到另一个元素。
• flatMap:将流中的每个元素替换为目标元素的流,然后将多个流连接到一个流。
• limit:限制流中元素的数量。
• sorted:将流中的元素进行排序。
3. 终止操作(Terminal Operations)
终止操作会消耗流,并产生一个最终的结果或副作用:
• forEach:对流中的每个元素执行操作。
• collect:将流转换成其他形式(如集合)。
• reduce:通过某个连接动作将所有元素汇总成一个汇总结果。
• allMatch、anyMatch、noneMatch:检查流中的元素是否与给定的谓词匹配。
• count:返回流中元素的数量。
• findFirst、findAny:返回流中的第一个或任意一个元素。
4. 并行流(Parallel Streams)
通过将 Stream 转换为并行流,可以利用多核处理器的计算能力:
• 通过 parallelStream() 方法将一个 Stream 转换为并行流。
5. 例子
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "", "cherry", "strawberry", "", "melon");
// 去除空字符串,然后对结果排序
List<String> nonEmptyWords = words.stream()
.filter(word -> !word.isEmpty())
.sorted()
.collect(Collectors.toList());
System.out.println(nonEmptyWords);
// 计算空字符串的数量
long emptyCount = words.stream()
.filter(String::isEmpty)
.count();
System.out.println(emptyCount);
// 使用并行流进行排序
List<String> parallelSortedWords = words.parallelStream()
.sorted()
.collect(Collectors.toList());
System.out.println(parallelSortedWords);
}
}
6. 注意事项
• Stream 不是集合,它是一个惰性序列,这意味着元素直到需要时才会被处理。
• Stream 只能被消费一次,一旦执行了终止操作,流就会被关闭,无法再次使用。
• 并行流可以提高性能,但也可能增加复杂性,因为并行处理可能会导致线程安全问题和性能问题。
Stream API 提供了一种声明式的处理集合的方式,使得代码更加简洁和易于理解。它也支持函数式编程,允许开发者以更声明式的方式处理数据集合。
相关文章:
JAVA8 Stream API 使用详解
Java 8 引入了 Stream API,它提供了对集合对象进行一系列操作的新方式,包括筛选、转换、聚合等。Stream API 的设计目标是提供一种高效且易于使用的处理集合数据的方式,同时支持并行处理。 以下是 Java 8 Stream API 的一些核心概念和使用详解…...
Redis 集群架构:高可用与扩展性
一、引言 在当今数字化时代,数据量呈爆炸式增长,对数据存储和处理的要求也越来越高。Redis作为一款高性能的键值对存储数据库,其集群架构在应对高并发、大数据量场景时展现出了独特的优势,成为众多企业构建高效、稳定系统的关键技…...

Redis数据对象
基本结构图 key和value指向的是redisObject对象 type:标识该对象用的是什么类型(String、List Redis数据结构 SDS SDS有4个属性: len:记录了字符串长度,因此获取字符串长度的时候时间复杂度O(1ÿ…...

Docker部署GitLab服务器
一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台,集成了版本控制、代码审查、问题跟踪、持续集成与持续交付(CI/CD)等多种功能,旨在为团队提供一站式的项目管理解决方案。借助 GitLab,开发…...

python版本的Selenium的下载及chrome环境搭建和简单使用
针对Python版本的Selenium下载及Chrome环境搭建和使用,以下将详细阐述具体步骤: 一、Python版本的Selenium下载 安装Python环境: 确保系统上已经安装了Python 3.8及以上版本。可以从[Python官方网站]下载并安装最新版本的Python,…...

重温设计模式--4、组合模式
文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…...

5、mysql的读写分离
主从复制 主从复制的含义 主从复制:在一个mysql的集群当中,至少3台,即主1台,从2台。 当有数据写入时,主负责写入本库,然后把数据同步到从服务器。 一定是在主服务器写入数据,从服务器的写入…...

uniapp Native.js原生arr插件服务发送广播到uniapp页面中
前言 最近搞了个设备,需求是读取m1卡,厂家给了个安卓原生demo,接入arr插件如下,接入后发现还是少了一部分代码,设备服务调起后触发刷卡无法发送到uniapp里。 中间是一些踩坑记录,最后面是解决办法…...

如何在 Ubuntu 22.04 上安装 Elasticsearch
简介 在本教程中,你将学习如何在 Ubuntu 22.04 服务器上安装 Elasticsearch。此外,你还将学习如何使用 Elasticsearch REST API 索引和操作数据。 Elasticsearch 是一个基于 Apache Lucene Library 的免费分布式搜索和分析引擎。它是一个快速且可扩展的…...

单片机长耗时前后台任务优化
代码: void Task_10ms(void) {... }//改 void Task_2ms(void) {static uint8_t s_state 0switch(s_state){case 0:....s_state 1;break;case 1:....s_state 2;break;case 3:....s_state 1;break;default: //此段可以去除s_state 0;break; } } 参考链接 MCU长…...
Linux大数据方向shell
一、概述 shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核,还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。 二、shell入门 1.输出hello world touch helloworld.sh&…...

爬虫 APP 逆向 ---> shopee(虾皮) 电商
shopee 泰国站点:https://shopee.co.th/ shopee 网页访问时,直接弹出使用 app 登录查看,那就登录 shopee 泰国站点 app。 手机抓包:分类接口 接口:https://mall.shopee.co.th/api/v4/pages/get_category_tree 请求参…...
axios 常见的content-type、responseType有哪些?
一、Content Type Content Type ,也被称为MIME类型(Multipurpose Internet Mail Extensions),是一种用于标识数据格式的机制。在HTTP协议中,Content Type’通常通过请求或响应头部的’Content-Type’字段来指定。这个…...

从零开始C++游戏开发之第七篇:游戏状态机与回合管理
在游戏开发的道路上,状态管理是一个无法绕开的重要课题。尤其是在棋牌类游戏中,游戏的进行需要有条不紊地按照回合推进,同时管理多个游戏状态,如“等待玩家加入”、“游戏进行中”、“结算阶段”等。如何优雅且高效地实现这些逻辑…...

【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程
开发工具:IntelliJ IDEA 部署环境: Tomcat8.x Mysql5.6 JDK1.8 Maven3.x Redis ZooKeeper3.4。 本系统开发使用JAVA技术栈开发 使用uniapp技术栈 支持多端 H5AndroidIOS PC端使用:vueelementui 用户端使用:uniapp 管理端使用:…...

mac启ssh服务用于快速文件传输
x.1 在mac上启SSH服务 方法一:图形交互界面启ssh(推荐) 通过sharing - advanced - remote login来启动ssh;(中文版mac应该是 “系统设置 → 通用 → 共享”里打开“远程登录”来启动) 查看自己的用户名和…...
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
在当今大数据与人工智能蓬勃发展的时代,Apache Spark MLlib 作为强大的机器学习库,与广泛应用的 Java 语言相结合,为数据科学家和开发者们提供了丰富的可能性。那么,Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...

使用 Python 创建多栏 Word 文档 – 详解
目录 引言 一、工具与安装 二、Python 在 Word 中创建简单的多栏布局 三、Python 在 Word 文档的栏间添加分隔线 四、Python 从Word文档的指定位置开启多栏设置 五、Python 为多栏 Word 文档的各栏添加页码 引言 在文档设计中,排版不仅决定了内容的呈现方式&…...

WebPack3项目升级webpack5的配置调试记录
文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…...

Mysql的MHA高可用及故障切换
Mysql的MHA高可用及故障切换 MHA主从复制的单点问题配置1. 主从复制2. MHA高可用安装MHA的组件配置无密码认证manager节点配置manager节点上测试启动连接 故障切换模拟恢复 MHA master high availability 建立在主从复制基础之上的故障切换的软件系统。 主从复制的单点问题 …...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...

解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...

Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...