当前位置: 首页 > article >正文

什么是Stream流?

在Java中,Stream流是一种用于处理集合数据的抽象概念,它可以高效、简洁地对集合进行一系列的操作,比如过滤、排序、映射等。Stream API 是在 Java 8 中引入的,属于 Java 的新特性之一。

Stream流的特点

  1. 惰性求值Stream操作是延迟执行的,只有在需要结果时才会计算(比如调用 collect() 方法)。
  2. 链式操作:通过链式调用,可以将多个操作组合成一个清晰的流水线,避免繁琐的 for 循环和临时变量。
  3. 内部迭代:使用 Stream,数据的遍历由内部完成(而不是由外部的 for 循环完成),使得代码更简洁。
  4. 不可变性Stream 本身不会修改底层的数据结构,而是会返回一个新的 Stream,所以是不可变的。

Stream流的核心操作

Stream API 提供了丰富的操作,可以分为两类:

  1. 中间操作:返回一个新的 Stream,可以继续链式调用。常见的中间操作有:

    • filter:过滤出符合条件的元素
    • map:对每个元素进行转换操作
    • sorted:对元素进行排序
    • distinct:去重
    • limit:限制返回的元素数量
    • skip:跳过指定数量的元素
  2. 终结操作:触发流的计算并返回最终结果,不能继续链式调用。常见的终结操作有:

    • forEach:对每个元素执行给定的操作(比如打印)
    • collect:将流转换成其他形式(如集合、数组)
    • reduce:聚合流中的元素,比如求和、求最大值等
    • count:返回流中元素的个数
    • anyMatch / allMatch / noneMatch:判断流中的元素是否符合某个条件

使用示例

假设有一个包含若干整数的列表,我们可以通过 Stream 进行一系列的操作,比如过滤、映射和求和:

 

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 过滤出偶数,乘以2,然后求和
        int sum = numbers.stream()
                .filter(n -> n % 2 == 0)     // 中间操作:过滤偶数
                .map(n -> n * 2)             // 中间操作:将每个元素乘以2
                .reduce(0, Integer::sum);    // 终结操作:求和

        System.out.println("Sum: " + sum); // 输出结果:Sum: 60
    }
}
 

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 过滤出偶数,乘以2,然后求和
        int sum = numbers.stream()
                .filter(n -> n % 2 == 0)     // 中间操作:过滤偶数
                .map(n -> n * 2)             // 中间操作:将每个元素乘以2
                .reduce(0, Integer::sum);    // 终结操作:求和

        System.out.println("Sum: " + sum); // 输出结果:Sum: 60
    }
}

Stream的常见来源

Stream可以从多种数据源创建:

  • 集合:如 ListSet,调用 stream() 方法
  • 数组:可以使用 Arrays.stream() 方法
  • 文件:通过 Files.lines() 读取文件的每一行并转换为流
  • 生成:如 Stream.of() 直接生成一个流
  • 无限流:通过 Stream.iterate()Stream.generate() 生成一个无限的流

总结

Stream流是一种用于处理数据的强大工具,能让代码更简洁、更具可读性,同时还提升了性能。通过 Stream,我们可以以声明式的方式操作数据,而不用编写繁琐的迭代代码。


http://www.kler.cn/a/390572.html

相关文章:

  • AMD CPU下pytorch 多GPU运行卡死和死锁解决
  • 一文详解java的数据类型
  • Unity3D学习FPS游戏(11)敌人AI巡逻(NavMesh)
  • Ue5 umg学习(一)
  • 基于BILSTM及其他RNN序列模型的人名分类器
  • 【CICD】GitLab Runner 和执行器(Executor
  • 【模块一】kubernetes容器编排进阶实战之k8s基础概念
  • Java 后端开发框架总结笔记:
  • Python 爬虫运行状态监控:进度、错误与完成情况
  • 智能零售:AI赋能电商行业的全面升级与高效运营
  • Spring Boot实战:编程训练系统开发手册
  • ssm+vue710的线上招聘问答系统的设计与实现
  • 云计算答案
  • 使用ThorUi
  • @SpringBootApplication源码解析
  • 【ComfyUI +BrushNet+PowerPaint】图像修复(根据题词填充目标)——ComfyUI-BrushNet
  • shodan7(泷羽sec)
  • SystemVerilog学习笔记(一):数据类型
  • (C++)验证累加非原子操作以及vector和thread的结合使用(附fitten code插件安装方法,AI插件,帮忙填充代码)
  • Layui layui.treeTable 树表格组件 去除图标展示
  • rust模式和匹配
  • Redis经典面试题-深度剖析
  • Android dagger的使用
  • spring -第十四章 spring事务
  • D-Link NAS account_mgr.cgi 未授权RCE漏洞复现(CVE-2024-10914)
  • 48651