深入理解Java中Stream流常用方法及示例

深入理解Java中Stream流常用方法及示例

  • 一、介绍
  • 二、举例说明
    • 1. filter方法
    • 2. map方法
    • 3. sorted方法
    • 4. forEach方法
    • 5. reduce方法
    • 6. collect方法
    • 7. flatMap方法
    • 8. anyMatch和allMatch方法
    • 9. findFirst和findAny方法
    • 10. skip和limit方法
    • 11. distinct方法


一、介绍

Java 8引入的Stream API为处理集合数据提供了一种更为优雅和便捷的方式。Stream流提供了一系列丰富的方法,能够帮助我们轻松地进行数据操作和处理。在本文中,我们将介绍Java Stream流的常见方法,并通过具体的示例来演示它们的用法。

二、举例说明

1. filter方法

filter方法用于过滤流中的元素,只保留满足特定条件的元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");List<String> result = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList());System.out.println(result); // 输出:[Alice]

2. map方法

map方法用于对流中的每个元素进行映射操作,将元素转换为另一种形式。

List<String> names = Arrays.asList("apple", "banana", "cherry");List<Integer> lengths = names.stream().map(String::length).collect(Collectors.toList());System.out.println(lengths); // 输出:[5, 6, 6]

3. sorted方法

sorted方法用于对流中的元素进行排序。

List<String> names = Arrays.asList("Charlie", "Alice", "Bob");List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());System.out.println(sortedNames); // 输出:[Alice, Bob, Charlie]

4. forEach方法

forEach方法对流中的每个元素执行指定的操作。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");names.stream().forEach(System.out::println);

输出:

Alice
Bob
Charlie

5. reduce方法

reduce方法用于将流中的所有元素归约为单个值。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int sum = numbers.stream().reduce(0, Integer::sum);System.out.println(sum); // 输出:15

6. collect方法

collect方法用于将流中的元素收集到集合中。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");Set<String> nameSet = names.stream().collect(Collectors.toSet());System.out.println(nameSet); // 输出:[Alice, Bob, Charlie]

当涉及到Java Stream流的使用时,除了上述常用方法外,还有许多其他有用的方法可以帮助进行更复杂和高效的数据处理。接下来,我们将继续介绍一些常见的Java Stream流方法,并附上相应的示例代码。

7. flatMap方法

flatMap方法用于将多个流合并成一个流,常用于处理嵌套结构的数据。

List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2, 3),Arrays.asList(4, 5, 6),Arrays.asList(7, 8, 9)
);List<Integer> flattenedList = numbers.stream().flatMap(List::stream).collect(Collectors.toList());System.out.println(flattenedList); // 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

8. anyMatch和allMatch方法

anyMatch方法用于检查流中是否有任意一个元素满足给定条件,而allMatch方法则用于检查流中的所有元素是否都满足给定条件。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean anyMatchGreaterThanThree = numbers.stream().anyMatch(num -> num > 3);boolean allMatchLessThanTen = numbers.stream().allMatch(num -> num < 10);System.out.println(anyMatchGreaterThanThree); // 输出:true
System.out.println(allMatchLessThanTen); // 输出:true

9. findFirst和findAny方法

findFirst方法用于返回流中的第一个元素,而findAny方法则返回流中的任意一个元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");Optional<String> firstMatch = names.stream().filter(name -> name.startsWith("C")).findFirst();Optional<String> anyMatch = names.stream().filter(name -> name.length() == 3).findAny();System.out.println(firstMatch.orElse("No match")); // 输出:Charlie
System.out.println(anyMatch.orElse("No match")); // 输出:Bob (或者其他任意一个满足条件的元素)

10. skip和limit方法

skip方法用于跳过流中的前几个元素,而limit方法则用于限制流中元素的数量。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);List<Integer> skipFirstTwo = numbers.stream().skip(2).collect(Collectors.toList());List<Integer> limitToThree = numbers.stream().limit(3).collect(Collectors.toList());System.out.println(skipFirstTwo); // 输出:[3, 4, 5]
System.out.println(limitToThree); // 输出:[1, 2, 3]

11. distinct方法

distinct方法用于去除流中的重复元素。

List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 4, 5, 5);List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());System.out.println(distinctNumbers); // 输出:[1, 2, 3, 4, 5]

通过合理地运用以上这些方法,我们可以更加灵活地处理和操作集合数据,从而编写出更为简洁、高效的代码。Java Stream流的强大之处在于其丰富的方法库,能够有效地应对各种数据处理需求,提升开发效率和代码质量。希望本文能帮助您更好地理解和应用Java Stream流。


  • 世界是多姿多彩的,不同的人生经历造就了不同的精彩。
  • 永远保持一颗感恩的心,感激生活中的每一份温暖和美好。
  • 梦想是生命的引擎,坚持追求梦想,才能创造出辉煌的人生。
  • 人生就像一本书,不管过去有多少遗憾,都可以在未来重新书写。
  • 用心倾听,用爱关怀,让世界因你的存在变得更加美好。
  • 做一个乐观向上的人,积极面对生活中的每一个挑战与困难。
  • 做事要脚踏实地,努力奋斗,才能赢得更广阔的天空。
  • 不要因为失败而放弃,因为失败是成功的一部分,只要坚持,终会迎来胜利的曙光。
  • 人生路上有许多选择,但唯有勇敢迈出第一步,才能走向辉煌的未来。
  • 让爱成为你前行的动力,让希望成为你坚持的力量,你将创造出无限可能的人生。

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

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

相关文章

背 单 词 (考研词汇闪过)

单词&#xff1a; 买考研词汇闪过 研究艾宾浩斯遗忘曲线 https://www.bilibili.com/video/BV18Y4y1h7YR/?spm_id_from333.337.search-card.all.click&vd_source5cbefe6dd70d6d84830a5891ceab2bf9 单词方法 闪记背两排&#xff08;5min&#xff09;重复一遍&#xff08;2mi…

Pixel-GS:用于3D高斯溅射的具有像素感知梯度的密度控制

Pixel-GS: Density Control with Pixel-aware Gradient for 3D Gaussian Splatting Pixel-GS&#xff1a;用于3D高斯溅射的具有像素感知梯度的密度控制 Zheng Zhang  Wenbo Hu†  Yixing Lao   老宜兴市郑张文博胡 † Tong He  Hengshuang Zhao† 赵同和恒双 †1122113311 …

Web前端 Javascript笔记1

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后&#xff0c;可由所有的现代浏…

BTS441RGATMA1 N沟道 43V 17A高侧电源开关芯片 英飞凌

BTS441RGATMA1是一款由Infineon Technologies制造的高侧开关电源芯片。 直 接 联 系 客 服 价 格 比 商 城 下 单 更 便 宜 BTS441RGATMA1具有以下功能&#xff1a; 高端电源开关&#xff1a;BTS441RGATMA1是一种N通道功率场效应晶体管&#xff08;FET&#xff09;&#xff…

图像处理与视觉感知---期末复习重点(7)

文章目录 一、图像压缩1.1 三种冗余1.2 模型1.3 信息测量 二、无误差压缩2.1 哈夫曼编码2.1.1 步骤2.1.2 例题 2.2 算术编码 三、变换编码 一、图像压缩 1.1 三种冗余 1. 三种基本的是数据冗余为&#xff1a;编码冗余、像素间冗余、心理视觉冗余。 2. 编码冗余&#xff1a;如果…

途游游戏,科锐国际(计算机类),快手,CVTE,得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推

途游游戏&#xff0c;科锐国际&#xff08;计算机类&#xff09;&#xff0c;快手&#xff0c;CVTE&#xff0c;得物&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;…

⭐Unity 里调用弹出电脑系统文件选择窗 (选择图片/文件)

今天遇到的需求要从Uinty里调用选择程序外的图片&#xff0c;类似手机环境下拿图库的照片一样。 效果如下: 话不多说 直接上代码&#xff01; 1.编辑器模式下 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Syst…

vue中预览docx、xlsx、pptx、pdf

前言&#xff1a;其实本来是要做全类型文件预览的&#xff0c;但是一直找不到合适的doc,xlx,ppt预览插件。要是有可以使用的&#xff0c;可以评论推荐给我 我使用的node版本&#xff1a;v18.19.1 参考官网&#xff1a;preview 文件预览 | ran 引入方式&#xff1a; //安装组…

瀑布流布局

瀑布流布局&#xff1a;瀑布流&#xff0c;又称瀑布流式布局&#xff0c;是比较流行的一种页面布局&#xff0c;视觉表现为参差不齐的多栏布局。 问题概述: 一次性生成&#xff0c;不需要再次增加&#xff0c;排序顺序由上倒下&#xff0c;由左到右 解决方案&#xff1a; //…

深度分析thinkphp类的自动加载

类的自动加载是框架中非常重要的特性&#xff0c;它允许你在使用类时无需手动包含或引入对应的文件。类的自动加载实现起来很简单&#xff0c;只需这样的一个函数spl_autoload_register就能实现。但框架都有各自的加载规范&#xff0c;并不是所有类都能被自动加载&#xff0c;因…

fatal: Need to specify how to reconcile divergent branches.

报错 hint: You have divergent branches and need to specify how to reconcile them. hint: You can do so by running one of the following commands sometime before hint: your next pull: hint: hint: git config pull.rebase false # merge (the default strategy) hi…

最优算法100例之41-用两个栈实现队列

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 用两个栈实现队列 题解报告 stack<int> stack1; stack<int> stack2; void push(int node) {stack1.push(node);…

2024-4-11-arm作业

汇编实现三个灯的闪烁 源代码&#xff1a; .text .global _start _start: 时钟使能LDR r0,0x50000A28ldr r1,[r0]orr r1,r1,#(0x1<<4)str r1,[r0]设置PE10输出LDR r0,0x50006000ldr r1,[r0]bic r1,r1,#(0x3<<20)orr r1,r1,#(0x1<<20)str r1,[r0]设置PE1…

飞机降落蓝桥杯[2023蓝桥省赛B组]

2023蓝桥省赛B组 B题 飞机降落 题解 标准深搜板子题&#xff0c;难度不大 #include<bits/stdc.h> using namespace std; #define MAX 10 struct node{int t,d,l;//t:飞机到达时间 d:飞机最大盘旋时间 l:飞机降落所需时间bool v;//标记此架飞机是否被搜索过 用于剪枝 };…

OpenResty,Nginx实现接口验签与黑名单控制

介绍 nginx与openresty是两种优秀知名的7层负载均衡软件&#xff0c;nginx以其出色的性能和稳定性成为首选&#xff0c;而openresty则是在Nginx基础上构建的&#xff0c;支持嵌入Lua语言&#xff0c;大幅提升了开发效率。 安装OpenResty 版本 openresty-1.25.3.1-win64下载地…

brpc: bthread使用

使用bthread并发编程 #include <gflags/gflags.h> #include <butil/logging.h> #include <bthread/bthread.h>static void* func(void* args) {std::string* num static_cast<std::string*>(args);for(int i 0; i < 5; i) {LOG(INFO) << *…

mybatis的一对多

业务&#xff1a;通常主表从表 查询&#xff0c;一对多关系&#xff0c;通常是先查主表&#xff0c;然后拿主表的 关联字段与从表关联。在代码中 通常用for 循环等方法给 从表的数据赋值&#xff0c;很麻烦&#xff0c;&#xff0c;&#xff0c;很麻烦。。。。 用mybatis的…

一个PDF文件含有多篇不同的内容,如何把这些内容分离出来?

一&#xff0c;PDF的含义 PDF&#xff0c;全称Portable Document Format&#xff0c;即便携式文档格式&#xff0c;是一种由Adobe Systems开发的文件格式&#xff0c;用于呈现文档&#xff0c;包括文本、图像、向量图形、字体、颜色、页面布局等&#xff0c;并可在不同的操作系…

FPGA在医疗的应用,以4K医疗内窥镜为例

前言 随着技术的发展&#xff0c;医学影像作为科学技术的主要成就之一&#xff0c;在无创诊断和治疗领域已经有了多种应用。其中一个应用是内窥镜&#xff0c;在20世纪90年代&#xff0c;当利用电荷耦合装置将图像传输到显示器上成为可能时&#xff0c;内窥镜变得更加广泛。为…

怎么做预约小程序_探索我们的全新预约小程序

在繁忙的现代生活中&#xff0c;无论是想预约一次美容护理&#xff0c;还是预定一家心仪的餐厅&#xff0c;亦或是安排一次专业的咨询服务&#xff0c;我们都希望能够在最短的时间内完成这些操作&#xff0c;节省时间和精力。如今&#xff0c;一款全新的预约小程序应运而生&…