告别繁琐循环:用Java Stream优雅处理集合

简介: 告别繁琐循环:用Java Stream优雅处理集合

告别繁琐循环:用Java Stream优雅处理集合

在日常开发中,对集合进行遍历、过滤和数据处理是我们最常见的操作。传统的for循环不仅代码冗长,而且容易出错。自Java 8以来,Stream API的引入为我们提供了一种声明式、高效处理数据序列的新方式。

什么是Stream?

Stream(流)不是集合数据结构,它更像一个高级的迭代器。它不存储数据,而是对数据源(如集合、数组)进行一系列并行或串行的流水线操作。这种风格让我们能更清晰地表达我们的意图:“做什么”而不是“怎么做”

Stream的核心三步骤:

  1. 创建流:从数据源(如一个List)获取一个流。

    List<String> names = Arrays.asList("Anna", "Bob", "Chris", "David");
    Stream<String> stream = names.stream();
    
  2. 中间操作:对流进行一系列处理,返回一个新的流。这是构建操作链条的关键。

    • 过滤filter() - 留下满足条件的元素。
      stream.filter(name -> name.startsWith("A")); // 过滤出以A开头的名字
      
    • 映射map() - 将元素转换为另一种形式。
      stream.map(String::toUpperCase); // 将所有名字转为大写
      
  3. 终止操作:执行流水线,产生最终结果。执行后,流就被消费掉了,无法再使用。

    • 收集collect() - 将流转换为集合或其他形式。
      List<String> resultList = stream.collect(Collectors.toList());
      
    • 遍历forEach() - 对每个元素执行操作。
    • 匹配anyMatch(), allMatch()等。

一个完整的例子:

假设我们有一个用户列表,想找出所有年龄大于18岁的用户的名字,并收集到一个新列表中。

List<User> users = ... // 你的用户列表

List<String> adultNames = users.stream()           // 创建流
        .filter(user -> user.getAge() > 18)       // 中间操作:过滤年龄
        .map(User::getName)                       // 中间操作:映射为名字
        .collect(Collectors.toList());            // 终止操作:收集为List

优势总结:

  • 代码简洁:逻辑清晰,链式调用一气呵成。
  • 可读性强:更接近自然语言的表达方式。
  • 并行友好:只需将.stream()改为.parallelStream(),即可轻松利用多核优势。

Stream API是现代Java开发者工具箱中的利器。花时间掌握它,能让你的代码更优雅、更高效。

希望这篇短文能帮助你入门Java Stream!欢迎在评论区交流你的使用心得。

相关文章
|
21天前
|
存储 Kubernetes Docker
部署eck收集日志到k8s
本文介绍基于ECK(Elastic Cloud on Kubernetes)在K8s中部署Elasticsearch、Kibana和Filebeat的完整流程。采用Helm方式部署ECK Operator,通过自定义YAML文件分别部署ES集群、Kibana及Filebeat,并实现日志采集与可视化。重点涵盖命名空间一致性、版本匹配、HTTPS配置禁用、资源限制、存储挂载及权限RBAC设置,支持系统日志、应用日志与容器日志的多源采集,适用于生产环境日志系统搭建。
597 94
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
271 116
|
21天前
|
自然语言处理 Java API
告别繁琐循环:用Java Stream优雅处理集合
告别繁琐循环:用Java Stream优雅处理集合
225 114
|
12天前
|
自然语言处理 JavaScript 前端开发
理解JavaScript闭包:从入门到实战
理解JavaScript闭包:从入门到实战
208 118
|
27天前
|
分布式计算 前端开发 Java
技术全景图:如何理解我们身边的技术类型?
技术全景图:如何理解我们身边的技术类型?
270 114
|
6天前
|
Python
别再只用%和.format了!解锁Python f-string的三个隐藏技巧
别再只用%和.format了!解锁Python f-string的三个隐藏技巧
144 115
|
10天前
|
JavaScript 安全 前端开发
告别类型判断烦恼:TypeScript 联合类型与类型守卫实战
告别类型判断烦恼:TypeScript 联合类型与类型守卫实战
155 112
|
6天前
|
缓存 前端开发 JavaScript
useEffect 依赖数组:你真的了解它的“秘密”吗?
useEffect 依赖数组:你真的了解它的“秘密”吗?
145 110
|
2天前
|
人工智能 自然语言处理 人机交互
《智能词汇》:十进制编码驱动的构词体系与极简语法应用机制研究
摘要 《智能词汇》作为一套创新性人工语言的词汇系统,其核心优势集中体现于词汇构词体系与语法应用机制的逻辑化设计。本文聚焦《智能词汇》的核心功能,系统解析其基于十进制编码的构词方法(语义场层级分类、词汇关系网络构建、无限扩展规则)与极简语法应用机制(词本位原则、无形态变化特征、语序主导语义表达)。研究表明,《智能词汇》以“道生万物”哲学思想为内核,以十进制数学逻辑为骨架,构建了“编码即语义、关系即规则、语法即秩序”的完整体系,实现了词汇构词的规则化、语义关联的精准化与语法应用的简洁化,为人工语言的词汇与语法设计提供了新范式,兼具语言学习的高效性与跨场景应用的适配性。
169 114
《智能词汇》:十进制编码驱动的构词体系与极简语法应用机制研究
|
27天前
|
安全 Java API
告别Date与Calendar:拥抱现代Java日期时间API
告别Date与Calendar:拥抱现代Java日期时间API
253 112