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

Stream API:高效处理数据流!

全文目录:

    • 开篇语
    • 前言
      • 一、Stream 的概念与操作
        • 1.1 Stream 的特点
        • 1.2 创建 Stream
          • 代码示例:创建 Stream
      • 二、中间操作与终端操作
        • 2.1 中间操作
        • 2.2 终端操作
          • 代码示例:中间操作与终端操作
      • 三、过滤、映射与聚合操作
        • 3.1 过滤(Filter)
          • 代码示例:使用 `filter()` 过滤元素
        • 3.2 映射(Map)
          • 代码示例:使用 `map()` 映射元素
        • 3.3 聚合操作
          • 代码示例:使用 `reduce()` 进行聚合
      • 四、并行流与性能优化
        • 4.1 并行流(Parallel Stream)
          • 代码示例:使用并行流
        • 4.2 性能优化
      • 总结:Stream API 的威力
    • 文末

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在 Java 8 引入了 Stream API,这使得数据处理变得更加简洁、高效和表达力强。通过 Stream API,我们能够以声明式的方式处理集合和数组等数据源,极大地提升了代码的可读性和可维护性。今天我们将深入探讨 Stream 的概念与操作中间操作与终端操作过滤、映射与聚合操作,以及 并行流与性能优化

一、Stream 的概念与操作

Stream 是一个可以从数据源(如集合、数组、I/O 通道等)生成的元素的集合,并且通过管道化的操作对这些元素进行处理。Stream 是 不存储数据 的,它们只是数据操作的一个视图或计算过程,每个中间操作都返回一个新的 Stream。

1.1 Stream 的特点
  • 无存储:Stream 并不存储数据,它只是对数据源的一个视图。
  • 函数式编程风格:Stream 使用链式调用,使得数据处理过程更加简洁。
  • 延迟计算:Stream 的操作是懒执行的,只有在执行终端操作时,才会触发数据处理。
1.2 创建 Stream

Stream 可以从多种数据源创建,常见的创建方法包括:

  • 从集合中创建list.stream()
  • 从数组中创建Arrays.stream(array)
  • 从文件中创建Files.lines(path)
  • 使用 Stream.of() 创建Stream.of("a", "b", "c")
代码示例:创建 Stream
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;public class StreamExample {public static void main(String[] args) {// 从集合中创建 StreamList<String> list = Arrays.asList("a", "b", "c");list.stream().forEach(System.out::println);  // 使用 forEach 遍历// 从数组中创建 StreamString[] array = {"1", "2", "3"};Arrays.stream(array).forEach(System.out::println);// 使用 Stream.of 创建 StreamStream<String> stream = Stream.of("x", "y", "z");stream.forEach(System.out::println);}
}

二、中间操作与终端操作

Stream API 中的操作可以分为 中间操作终端操作

2.1 中间操作

中间操作返回一个新的 Stream,因此它们是 惰性 的操作。常见的中间操作包括:

  • filter():过滤流中的元素。
  • map():对流中的每个元素进行操作,返回新的元素。
  • flatMap():将元素转换成多个元素并平铺,通常用于嵌套集合的扁平化。
  • sorted():对流中的元素进行排序。
  • distinct():去重操作。
2.2 终端操作

终端操作会触发 Stream 的计算,并且会将结果返回或输出。常见的终端操作包括:

  • forEach():对流中的每个元素进行操作。
  • collect():将 Stream 转换为其他数据结构(如 List、Set、Map)。
  • reduce():通过一个累加器将流中的元素聚合成一个结果。
  • count():返回流中元素的数量。
  • anyMatch()allMatch()noneMatch():用于判断流中的元素是否匹配某些条件。
代码示例:中间操作与终端操作
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class StreamOperationsExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);// 中间操作:filter 和 mapList<Integer> result = numbers.stream().filter(n -> n % 2 == 0)  // 过滤偶数.map(n -> n * n)          // 对每个元素平方.collect(Collectors.toList());  // 终端操作:收集结果System.out.println(result);  // 输出: [4, 16, 36, 64]// 终端操作:forEachnumbers.stream().forEach(System.out::println);}
}

三、过滤、映射与聚合操作

Stream API 提供了强大的数据处理能力,包括过滤、映射、聚合等操作。

3.1 过滤(Filter)

filter() 中间操作用于过滤符合条件的元素,返回一个新的 Stream。

代码示例:使用 filter() 过滤元素
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0)  // 过滤偶数.collect(Collectors.toList());
System.out.println(evenNumbers);  // 输出: [2, 4, 6]
3.2 映射(Map)

map() 中间操作用于将流中的每个元素进行转换,并返回新的流。

代码示例:使用 map() 映射元素
List<String> words = Arrays.asList("hello", "world", "java");
List<String> upperCaseWords = words.stream().map(String::toUpperCase)  // 将每个字符串转换为大写.collect(Collectors.toList());
System.out.println(upperCaseWords);  // 输出: [HELLO, WORLD, JAVA]
3.3 聚合操作

Stream 提供了 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

  reduce() 方法接受两个参数:初始值和一个 BinaryOperator 函数,这里用来对流中的所有元素进行求和操作。


四、并行流与性能优化

4.1 并行流(Parallel Stream)

Java 的 Stream API 支持 并行流,它利用多核 CPU 的优势,将流中的操作并行化。通过 parallelStream()stream().parallel() 方法可以轻松创建并行流。

  • 优势:对于计算密集型任务,使用并行流可以显著提升性能。
  • 劣势:对于 IO 密集型任务,并行流并不会提高性能,反而可能导致线程切换开销增加。
代码示例:使用并行流
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
int sum = numbers.parallelStream()  // 创建并行流.reduce(0, Integer::sum);  // 求和
System.out.println(sum);  // 输出: 45

  在此例中,parallelStream() 创建了一个并行流,流中的元素将由多个线程并行处理,从而提高性能。

4.2 性能优化
  • 避免不必要的操作:Stream 是惰性执行的,但每个中间操作都可能带来性能开销。在实际使用中,应该尽量避免不必要的中间操作。
  • 使用并行流:对于大量的数据处理任务,可以考虑使用并行流进行优化。
  • 减少内存复制:对于大的数据集,尽量避免不必要的内存复制和数据复制。

总结:Stream API 的威力

  通过 Java 8 引入的 Stream API,我们能够以简洁的方式处理集合和数组中的数据。通过流的中间操作和终端操作,开发者可以轻松地进行过滤、映射和聚合等数据处理。并行流提供了一个便捷的方式来充分利用多核 CPU,从而加速计算密集型任务的执行。

  掌握 Stream API,你可以编写更加简洁、高效的代码,轻松应对大规模数据的处理和并行计算任务!

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

相关文章:

  • 华为WLAN概述知识点及案例试题
  • 基于单片机的宠物屋智能系统设计与实现(论文+源码)
  • VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
  • 【Docker 03】Docker Registry - 镜像仓库
  • 基于uni-app for HarmonyOS5 的跨平台组件库开发指南,以及组件示例
  • 安宝特科技丨Pixee Medical产品获FDA认证 AR技术赋能骨科手术智能化
  • 热烈祝贺埃文科技正式加入可信数据空间发展联盟
  • 无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技
  • PydanticAI 作为 MCP 客户端示例
  • 报文口令重写功能分析(以某巢为例)
  • AI知识库调用全攻略:四种实战方法与技术实现
  • 读书笔记:83页华为数据之道提炼整理【附全文阅读】
  • 浅谈 ST 表(Sparse Table,稀疏表)
  • 规则与人性的天平——由高考迟到事件引发的思考
  • 从零手写Java版本的LSM Tree (六):WAL 写前日志
  • 从零手写Java版本的LSM Tree (七):压缩策略
  • 第二章:文本处理与表示的基础 —— 解码语言的奥秘
  • 运放——单电源供电和双电源供电
  • PyG测试GCN无线通信网络拓扑推理方法时间复杂度
  • Windows11+VS2019配置Libigl-2.4.1
  • 上海行业网站建设/百度软件商店
  • 猎聘网网站谁做的/seo网站推广助理
  • 如何做漂亮的网站/关键词优化工具
  • 文化创意有限公司/天津百度快照优化公司
  • 网站策划编辑如何做/跨境电商培训
  • java做的网站怎么设置关闭和开启网站访问不了怎么办/昆山网站建设