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());
相关推荐
皮皮林5515 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河5 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程8 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅10 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者11 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺11 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart12 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP13 小时前
MyBatis-mybatis入门与增删改查
java
孟陬16 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端