告别繁琐循环:用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!欢迎在评论区交流你的使用心得。

相关文章
|
1月前
|
存储 Kubernetes Docker
部署eck收集日志到k8s
本文介绍基于ECK(Elastic Cloud on Kubernetes)在K8s中部署Elasticsearch、Kibana和Filebeat的完整流程。采用Helm方式部署ECK Operator,通过自定义YAML文件分别部署ES集群、Kibana及Filebeat,并实现日志采集与可视化。重点涵盖命名空间一致性、版本匹配、HTTPS配置禁用、资源限制、存储挂载及权限RBAC设置,支持系统日志、应用日志与容器日志的多源采集,适用于生产环境日志系统搭建。
626 94
|
1月前
|
大数据 Python
Python列表推导式:优雅与效率的完美结合
Python列表推导式:优雅与效率的完美结合
228 114
|
9天前
|
安全 PHP
PHP 8.1枚举:告别数组常量的新时代
PHP 8.1枚举:告别数组常量的新时代
152 113
|
9天前
|
安全 Java 编译器
锁的进化:深入理解Java中的锁粗化与锁消除
锁的进化:深入理解Java中的锁粗化与锁消除
168 114
|
9天前
|
安全 IDE Java
别让“配置”成为你系统的无声刺客:拥抱Type-Safe的配置管理
别让“配置”成为你系统的无声刺客:拥抱Type-Safe的配置管理
181 113
|
9天前
|
安全 PHP 开发者
告别混乱:用PHP 8的Match表达式优雅地简化你的条件逻辑
告别混乱:用PHP 8的Match表达式优雅地简化你的条件逻辑
160 113
|
9天前
|
Java 数据建模 编译器
告别样板代码:探索Java Record如何重塑数据载体
告别样板代码:探索Java Record如何重塑数据载体
167 114
|
16天前
|
Python
别再只用%和.format了!解锁Python f-string的三个隐藏技巧
别再只用%和.format了!解锁Python f-string的三个隐藏技巧
158 115
|
20天前
|
JavaScript 安全 前端开发
告别类型判断烦恼:TypeScript 联合类型与类型守卫实战
告别类型判断烦恼:TypeScript 联合类型与类型守卫实战
172 112
|
9天前
|
缓存 安全 Java
探索并发编程中ConcurrentHashMap的使用
综上所述,ConcurrentHashMap是Java并发编程中不可或缺的一部分,它通过与操作系统、JVM及硬件特性紧密结合,为开发高效且线程安全的并发应用程序提供了强大的数据结构支持。掌握ConcurrentHashMap的使用是实现高性能并发程序的关键步骤之一。
160 117