java之Stream简介说明

欢喜 Java经验 发布时间:2025-06-05 17:09:09 阅读数:405 1
下文笔者讲述java中Stream流的简介说明,如下所示

Stream(流)简介

在Java中,Stream(流)是
  从Java 8开始引入一个重要特性(位于`java.util.stream`包)
    它提供一种高效且声明式的处理集合数据的方式
	  Stream 并不是用于存储数据的数据结构
	    而是用于对集合进行一系列链式操作(如过滤、映射、排序等)工具

Stream特点

 -不存储数据:Stream只是
       数据源(如 Collection、数组等)视图
 -函数式编程风格:支持链式调用,
       代码简洁清晰
 -惰性求值(Lazy Evaluation):中间操作不会立即执行,
       直到遇到终端操作才会触发实际计算。
 -可并行处理:通过 `parallelStream()` 
       支持并行处理,
	      提高大数据量下的性能。
 -一次消费:一个 Stream 只能被消费一次,
          不能重复使用

Stream基本流程

完整Stream 操作通常
包括三个阶段
1.获取流 
2.中间操作(Intermediate Operations) 
3.终端操作(Terminal Operation) 
list<String> filtered = list.stream()
    .filter(s -> s.startsWith("A"))     // 中间操作
    .map(String::toUpperCase)           // 中间操作
    .limit(5)                            // 中间操作
    .toList();                           // 终端操作

常见操作分类

1.获取Stream方式

数据源类型 获取方式
集合(Collection) `collection.stream()` 或
`parallelStream()`
数组 `Arrays.stream(array)` 或
`Stream.of(array)`
静态方法生成 `Stream.of("a", "b")`,
`Stream.empty()`
文件读取 `Files.lines(path)`

2.中间操作(返回 Stream)

方法名 描述
[filter(Predicate)] 过滤符合条件的元素
`map(Function)` 对每个元素做映射转换
`flatMap(Function)` 将每个元素映射为多个元素,合并成一个流
`distinct()` 去重
`sorted()` / `sorted(Comparator)` 排序
`peek(Consumer)` 查看元素,调试用
`limit(n)` 截断流,只保留前 n 个元素
`skip(n)` 跳过前 n 个元素

3.终端操作(触发实际计算)

方法名描述
`forEach(Consumer)`遍历所有元素
`forEachOrdered(Consumer)`有序遍历
`collect(Collector)` 收集结果到容器(如 List、Map 等)
`reduce(BinaryOperator)`归约操作(如求和、最大值)
[count()]返回元素数量
`anyMatch(Predicate)`是否至少有一个匹配
`allMatch(Predicate)`是否全部匹配
`noneMatch(Predicate)`是否没有匹配
`findFirst()`/`findAny()`获取第一个或任意元素

Collectors工具类常用方法(配合`collect()`使用)

方法 功能
`Collectors.toList()` 收集为 List
`Collectors.toSet()` 收集为 Set
`Collectors.toMap(keyMapper, valueMapper)` 收集为 Map
`Collectors.groupingBy(Function)` 按某属性分组
`Collectors.partitioningBy(Predicate)` 按条件分区
`Collectors.joining()` 字符串拼接
`Collectors.summarizingInt/Long/Double()` 统计信息(如平均值、总数等)

1.简单筛选与收集

List<String> filtered = list.stream()
    .filter(s -> s.length() > 3)
    .map(String::toUpperCase)
    .toList();

2.分组统计

Map<Character, List<String>> grouped = list.stream()
    .collect(Collectors.groupingBy(s -> s.charAt(0)));

3.求最大值、最小值

Optional<Integer> max = numbers.stream().max(Integer::compareTo);

4.字符串拼接

String result = list.stream().collect(Collectors.joining(", "));

Stream注意事项

-不可变性:Stream 不会修改原始集合,
所有操作返回新结果 -只能消费一次:一旦执行了终端操作,
该Stream 不可再用 -避免副作用:中间操作应尽量无副作用,
尤其是并行流中容易引发问题 -并行流慎用:适用于 CPU 密集型任务,
默认使用`ForkJoinPool.commonPool()`
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202506/17491145768484.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者