当前位置: 首页 > news >正文

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&#xff0c;它提供了对集合对象进行一系列操作的新方式&#xff0c;包括筛选、转换、聚合等。Stream API 的设计目标是提供一种高效且易于使用的处理集合数据的方式&#xff0c;同时支持并行处理。 以下是 Java 8 Stream API 的一些核心概念和使用详解…...

Redis 集群架构:高可用与扩展性

一、引言 在当今数字化时代&#xff0c;数据量呈爆炸式增长&#xff0c;对数据存储和处理的要求也越来越高。Redis作为一款高性能的键值对存储数据库&#xff0c;其集群架构在应对高并发、大数据量场景时展现出了独特的优势&#xff0c;成为众多企业构建高效、稳定系统的关键技…...

Redis数据对象

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

Docker部署GitLab服务器

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

python版本的Selenium的下载及chrome环境搭建和简单使用

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

重温设计模式--4、组合模式

文章目录 1 、组合模式&#xff08;Composite Pattern&#xff09;概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式&#xff08;Composite Pattern&#xff09;概述 定义&#xff1a;组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成…...

5、mysql的读写分离

主从复制 主从复制的含义 主从复制&#xff1a;在一个mysql的集群当中&#xff0c;至少3台&#xff0c;即主1台&#xff0c;从2台。 当有数据写入时&#xff0c;主负责写入本库&#xff0c;然后把数据同步到从服务器。 一定是在主服务器写入数据&#xff0c;从服务器的写入…...

uniapp Native.js原生arr插件服务发送广播到uniapp页面中

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

如何在 Ubuntu 22.04 上安装 Elasticsearch

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

单片机长耗时前后台任务优化

代码&#xff1a; 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是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核&#xff0c;还是一个功能相当强大的编程语言&#xff0c;易编写&#xff0c;易调试&#xff0c;灵活性强。 二、shell入门 1.输出hello world touch helloworld.sh&…...

爬虫 APP 逆向 ---> shopee(虾皮) 电商

shopee 泰国站点&#xff1a;https://shopee.co.th/ shopee 网页访问时&#xff0c;直接弹出使用 app 登录查看&#xff0c;那就登录 shopee 泰国站点 app。 手机抓包&#xff1a;分类接口 接口&#xff1a;https://mall.shopee.co.th/api/v4/pages/get_category_tree 请求参…...

axios 常见的content-type、responseType有哪些?

一、Content Type Content Type &#xff0c;也被称为MIME类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;&#xff0c;是一种用于标识数据格式的机制。在HTTP协议中&#xff0c;Content Type’通常通过请求或响应头部的’Content-Type’字段来指定。这个…...

从零开始C++游戏开发之第七篇:游戏状态机与回合管理

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

【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程

开发工具&#xff1a;IntelliJ IDEA 部署环境: Tomcat8.x Mysql5.6 JDK1.8 Maven3.x Redis ZooKeeper3.4。 本系统开发使用JAVA技术栈开发 使用uniapp技术栈 支持多端 H5AndroidIOS PC端使用&#xff1a;vueelementui 用户端使用&#xff1a;uniapp 管理端使用&#xff1a…...

mac启ssh服务用于快速文件传输

x.1 在mac上启SSH服务 方法一&#xff1a;图形交互界面启ssh&#xff08;推荐&#xff09; 通过sharing - advanced - remote login来启动ssh&#xff1b;&#xff08;中文版mac应该是 “系统设置 → 通用 → 共享”里打开“远程登录”来启动&#xff09; 查看自己的用户名和…...

《探索 Apache Spark MLlib 与 Java 结合的卓越之道》

在当今大数据与人工智能蓬勃发展的时代&#xff0c;Apache Spark MLlib 作为强大的机器学习库&#xff0c;与广泛应用的 Java 语言相结合&#xff0c;为数据科学家和开发者们提供了丰富的可能性。那么&#xff0c;Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...

使用 Python 创建多栏 Word 文档 – 详解

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

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 建立在主从复制基础之上的故障切换的软件系统。 主从复制的单点问题 …...

FanControl:智能风扇控制的全方位解决方案

FanControl&#xff1a;智能风扇控制的全方位解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanControl…...

解锁TranslucentTB:4种高效实现Windows任务栏透明化的方法

解锁TranslucentTB&#xff1a;4种高效实现Windows任务栏透明化的方法 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 任务栏作为Windows…...

组播技术讲解

组播基础知识: 组播属于D类地址范围:224.0.0.0~240.255.255.255 图1:站在客户端的角度来看,存在两个模型ASM(任意源组播地址)、SSM(指定源组播地址);如果客户端程序只能选择加入的组地址,而无法选择组播源的地址,则部署ASM模型;如果客户端既可以选择加入的组地址,…...

Ollama调用translategemma-27b-it部署指南:Kubernetes集群水平扩展实践

Ollama调用translategemma-27b-it部署指南&#xff1a;Kubernetes集群水平扩展实践 1. 项目简介与核心价值 translategemma-27b-it是Google基于Gemma 3模型系列构建的先进翻译模型&#xff0c;专门处理55种语言之间的翻译任务。这个模型最大的特点是既能处理文本翻译&#xf…...

保姆级教程:用Vue 3 + Cesium 1.107 加载倾斜摄影模型(从OSGB到3DTiles全流程)

从OSGB到Web三维&#xff1a;Vue 3与Cesium 1.107的倾斜摄影实战指南 当我们需要在网页中展示真实世界的三维场景时&#xff0c;倾斜摄影技术提供了绝佳的解决方案。这种通过航拍获取多角度影像并重建三维模型的技术&#xff0c;已经成为数字孪生、智慧城市等领域的标配。但将专…...

【TypeScript】 在业务项目中的类型治理

TypeScript 在业务项目中的类型治理&#xff1a;重点不是写类型&#xff0c;而是少挖坑 一、很多团队用了 TypeScript&#xff0c;为什么还是经常出问题 很多项目上了 TypeScript 之后&#xff0c;表面看起来挺规范&#xff1a; 接口有类型组件参数有类型函数入参也有类型 但实…...

Intv_AI_MK11 处理时序数据:LSTM 思想在对话状态跟踪中的应用

Intv_AI_MK11 处理时序数据&#xff1a;LSTM 思想在对话状态跟踪中的应用 1. 引言&#xff1a;对话状态跟踪的挑战 在多轮对话系统中&#xff0c;准确跟踪对话状态是核心挑战之一。传统方法往往难以有效捕捉对话历史中的长期依赖关系&#xff0c;导致系统在复杂对话场景中容易…...

极简配置:OpenClaw快速接入Phi-3-mini-128k-instruct的HTTP接口

极简配置&#xff1a;OpenClaw快速接入Phi-3-mini-128k-instruct的HTTP接口 1. 为什么选择Phi-3-mini-128k-instruct 上周我在调试一个自动化文档处理流程时&#xff0c;发现现有的大模型响应速度跟不上我的实时需求。经过几轮测试&#xff0c;最终选择了微软开源的Phi-3-min…...

STM32F103C8T6 RAM不够用?手把手教你用CAN总线实现边收边写的IAP升级(附完整代码)

STM32F103C8T6 RAM资源紧张&#xff1f;CAN总线流式IAP方案实战解析 对于使用STM32F103C8T6这类RAM资源有限的MCU开发者来说&#xff0c;实现远程固件升级(IAP)功能时常常面临内存不足的困扰。这款经典Cortex-M3芯片仅有20KB RAM&#xff0c;传统方案需要预留大量缓冲区存储完整…...

SQL复杂报表如何通过窗口函数优化_减少子查询提升性能

窗口函数可高效替代关联子查询&#xff0c;适用于累计值、移动平均、并列排名等场景&#xff0c;性能提升3–10倍&#xff1b;须注意RANK()与ROW_NUMBER()语义差异、ORDER BY的强制性、ROWS优于RANGE、窗口函数不可用于WHERE/HAVING等关键规则。窗口函数替代关联子查询的典型场…...