javaSE 集合框架(五)——java 8新品Stream类

什么是Stream类?

Stream是Java 8引入的新API,用于处理集合数据的函数式操作。

我们经常需要对集合数据进行各种操作,比如过滤、排序等。然而数组有自己的Arrays类方法(比如sort() swap()),集合类有Collcetion接口的通用方法(比如add() size() addAll()等)也有Collections的静态方法(比如max(Collection) sort(List)等),为什么还要搞一个Stream呢?

那肯定就是解决前者的痛点问题咯!

我们始终以这个场景为例:

假设我们有一个海量整数列表,我们需要找出其中大于10的偶数。

痛点问题(一)命令式编程读起来头痛

命令式编程是什么?想想你每次写冒泡排序、选择排序的时候,都要痛苦的思考两层循环怎么写(初始下标是什么?结束判断是什么?),那就是命令式编程。

java 复制代码
// 传统:需要关注循环变量、条件判断、临时集合
List<Integer> evens = new ArrayList<>();
for (Integer num : numbers) {
    if (num % 2 == 0) {
        evens.add(num);
    }
}

而Stream采用链式编程、声明式编程,清晰易读。链式编程很好理解,在C++里就有这个概念了,最初被称为"语法糖",从"语法糖"这个名字我们就能看出来,开发者喜欢这种编程方式。那什么是生命式编程呢? 就像AI Agent一样,你只需要告诉他"要做什么",不需要告诉他"怎么去做",他自己会做。

java 复制代码
// Stream:关注业务逻辑本身
List<Integer> evens = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());

痛点问题(二)循环嵌套太深

痛点问题(三)所有数据都要遍历一遍

也就是说"海量数据的情况,collection和数组处理起来要for循环遍历海量数据。"

那Stream底层又是如何实现的"找到5个就停止了呢"

痛点问题(四)多线程写起来复杂,且容易遗漏线程安全的处理

我们有的朋友就因为写多线程没有注意线程安全的问题,在大厂的试用期被leader质疑了呢,如果他用Stream就不用处理了呢。

java 复制代码
// 传统并行处理:复杂且容易出错
List<Integer> numbers = // ... 大数据集
List<Integer> result = Collections.synchronizedList(new ArrayList<>());

// 需要手动管理线程池、任务分发、同步
ExecutorService executor = Executors.newFixedThreadPool(4);
for (Integer num : numbers) {
    executor.submit(() -> {
        if (num % 2 == 0) {
            synchronized(result) {
                result.add(num);
            }
        }
    });
}

而用Stream,只需要一行代码实现并行

java 复制代码
// Stream:一行代码实现并行
List<Integer> result = numbers.parallelStream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());
相关推荐
lsx2024063 分钟前
Python3 SMTP发送邮件教程
开发语言
callJJ3 分钟前
Spring AI 文本聊天模型完全指南:ChatModel 与 ChatClient
java·大数据·人工智能·spring·spring ai·聊天模型
CBeann4 分钟前
企业级规则引擎落地实战:动态脚本引擎 QLExpress ,真香!
java·ai·大模型·规则引擎·qlexpress·大厂实战项目
懈尘4 分钟前
从 Java 1.7 到 Java 21:逐版本深入解析新特性与平台演进
java·开发语言
亓才孓5 分钟前
[Maven]Maven基础
java·maven
凉辰7 分钟前
使用uni.createInnerAudioContext()播放指定音频(踩坑分享功能)
开发语言·javascript·音视频
hello 早上好9 分钟前
05_Java 类加载过程
java·开发语言
PPPPPaPeR.21 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
echoVic22 分钟前
多模型支持的架构设计:如何集成 10+ AI 模型
java·javascript
橙露24 分钟前
Java并发编程进阶:线程池原理、参数配置与死锁避免实战
java·开发语言