ArrayList可直接调用stream()获取Stream进行流式操作,支持filter、map、distinct等中间操作和collect、count等终止操作,流一次性且不修改原集合,需注意null安全处理。

Java 中 ArrayList 可以直接调用 stream() 方法获取 Stream,之后就能用各种流式操作处理数据,比如过滤、映射、聚合等。
获取 Stream 并做基础转换
ArrayList 实现了 Collection 接口,自带 stream() 方法,无需额外转换。
- 直接调用
list.stream()得到顺序流;需要并行处理时用list.parallelStream() - 流是“一次性”的,用完即失效,重复使用需重新获取
- 原始 ArrayList 不受影响,Stream 操作默认不修改原集合(除非在
forEach里手动改)
常用中间操作示例
这些操作返回新 Stream,支持链式调用:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
filter(x -> x > 10):保留大于 10 的元素 -
map(String::toUpperCase):把每个字符串转大写 -
distinct():去重(依赖元素的equals和hashCode) -
sorted()或sorted(Comparator.reverseOrder()):排序
常用终止操作与结果收集
终止操作会触发执行,并返回结果(如值、集合、布尔值等):
立即学习“Java免费学习笔记(深入)”;
-
collect(Collectors.toList()):收集为新 ArrayList(最常用) -
collect(Collectors.toSet()):收集为 Set,自动去重 -
count():返回元素个数(返回long) -
findFirst():返回第一个匹配元素(Optional包装) -
anyMatch(x -> x.startsWith("A")):是否存在满足条件的元素
注意空值和异常处理
Stream 不会自动跳过 null,遇到 null 可能抛 NullPointerException:
- 过滤前加
filter(Objects::nonNull)避免空指针 - 在
map中做判空处理,例如map(x -> x == null ? "" : x.trim()) - 自定义
Comparator时注意 null 安全,可用Comparator.nullsLast(String::compareTo)

















