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());
相关推荐
wjs20242 小时前
SQLite Glob 子句详解
开发语言
程序员小假2 小时前
设计一个支持万人同时抢购商品的秒杀系统?
java·后端
youyicc2 小时前
Qt连接Pg数据库
开发语言·数据库·qt
量子炒饭大师2 小时前
【C++入门】Cyber底码作用域的隔离协议——【C++命名空间】(using namespace std的原理)
开发语言·c++·dubbo
L***d6702 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
froginwe112 小时前
PHP 魔术常量
开发语言
古城小栈2 小时前
Rust 的 validator 库
开发语言·后端·rust
froginwe112 小时前
《Foundation 选项卡:设计与实现的深入探讨》
开发语言
C雨后彩虹2 小时前
竖直四子棋
java·数据结构·算法·华为·面试