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

什么是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.mrgr.cn/news/70565.html

相关文章:

  • Excel求和如何过滤错误值
  • 【如何用更少的数据作出更好的决策】-gpt生成
  • 前端速通(HTML)
  • 怎么只提取视频中的声音?从视频中提取纯音频技巧
  • Python和R荧光分光光度法
  • 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成
  • Centos7 安装RabbitMQ以及web管理插件
  • C++生成随机数
  • 数据结构与算法:二分搜索/二分查找的python实现与相关力扣题35.搜索插入位置、74.搜索二维矩阵
  • 衍射光学理解
  • 组件间通信(组件间传递数据)
  • 双十一”买买买!法官告诉你注意这些法律问题
  • 别再为视频转文字烦恼啦!这10个转换工具帮你一键搞定。
  • STM32系统的GPIO原理与结构
  • 如何提升测试的覆盖率?
  • VisionPro —— CogSobelEdgeTool边缘提取工具
  • jupyter+pycharm内部直接运行
  • 面试击穿mysql
  • go语言 分布式一致
  • Linux指令的基本使用
  • MySQL-初识数据库
  • 调整TCP参数, 优化网络性能
  • KafKa为什么这么快?
  • 使用服务器时进行深度学习训练时,本地必须一直保持连接状态吗?
  • 如何保证Redis与MySQL双写一致性
  • 数据集划分