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

news/2024/11/17 9:40:22/

深入理解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.ppmy.cn/news/1415365.html

相关文章

[C++11] nullptr完整解析

说明&#xff1a;nullptr 是 C11 引入的一个新特性&#xff0c;它表示一个空指针&#xff0c;用于替代之前使用的 NULL。接下来我们看看到底为什么要引入nullptr。 1 为什么引入nullptr C引入nullptr的原因主要是为了提供一种类型安全的表示空指针的方法&#xff0c;以及为了…

vue3的创建使用

一、vue3 用vite创建vue3项目 注意node.js版本 创建一个文件夹 首先要 安装npm &#xff1a; npm i 运行 npm run dev 新建了testView alt shift enter 运行js文件 cd .\ project\node .\index.js\ 二、vue3的特性(vue2和vue3的区别) 使用Proxy代替definePropert…

OJ刷题日记:1、双指针(1)

目录 1、283.移动零 2、1089.复写零 3、202.快乐数 1、283.移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

SmartAdmin:以高质量代码为核心的中后台快速开发平台

摘要&#xff1a; 随着数字化进程的加速&#xff0c;中后台系统的开发需求日益增长。为了满足市场对于高效、简洁、安全系统的需求&#xff0c;SmartAdmin 应运而生。作为一个开源项目&#xff0c;SmartAdmin 旨在提供一套基于 SpringBoot 和 Vue3 的高质量代码规范和中后台解决…

Debian 安装 Docker

Debian 安装 Docker。 这是官方安装文档 Install Docker Engine on Debian | Docker DocsLearn how to install Docker Engine on Debian. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/i…

LeetCode617:合并二叉树

题目描述 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重…

Golang | Leetcode Golang题解之第22题括号生成

题目&#xff1a; 题解&#xff1a; var res []stringfunc generateParenthesis(n int) []string {res make([]string, 0)dfs(n, 0, 0, "")return res }func dfs(n int, lc int, rc int, path string) {if lc n && rc n {res append(res, path)return }…

在mac环境下使用shell脚本实现tree命令

文章目录 使用ls实现tree使用find实现tree 使用ls实现tree 实现思路 使用ls -F 打印文件类型&#xff0c;如果是目录后面跟/&#xff0c;如果是可执行文件后面跟*&#xff1b;使用grep -v /$ 筛选文件排除目录&#xff0c;-v为反向筛选&#xff1b;使用grep /$ 仅筛选目录&am…