什么是Stream流?

devtools/2024/11/13 14:55:34/

在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
    }
}
 

java">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.ppmy.cn/devtools/133288.html

相关文章

【项目开发】RESTful架构及RESTful API设计指南

未经许可,不得转载。 文章目录 前言起源名词解释资源(Resources)表现层(Representation)状态转化(State Transfer)RESTful架构的基本特征REST API设计指南一、协议二、域名三、版本(Versioning)四、路径(Endpoint)五、HTTP动词六、过滤信息(Filtering)七、状态码(…

[SWPUCTF 2022 新生赛]Power! 反序列化详细题解

知识点: PHP反序列化(执行顺序) 构造POP链 代码审计 题目主页: 输入框可以输入内容,习惯性先查看一下页面的源代码,收集信息 发现源码中有提示参数source 先不急,再看一下其他信息 是apache服务器,php版本为7.4.30 url传参 ?sourceindex.php 回显了index.php的源码 …

ESLint 使用教程(一):从零配置 ESLint

前言 在现代前端开发中&#xff0c;代码质量和风格一致性是团队合作和项目维护的重要因素。而 ESLint 作为一款强大的 JavaScript 静态代码分析工具&#xff0c;能够帮助开发者发现和修复代码中的潜在问题。本文将详细介绍 ESLint 的常用规则配置&#xff0c;并结合实际应用场…

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver(二)

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver&#xff08;二&#xff09; 本教程作为gdb/gdbserver编译安装教程的一个补充&#xff0c;教会大家如何使用gdb/gdbserver进行远程调试。 如上图所示&#xff0c;我们需要将编译后的gdbserver上传至目标设备&#xff0c;其上…

7 软件维护

软件维护 1、软件维护概念和分类1.1 软件维护概念1.1 软件维护分类完善性维护纠错性维护适应性维护预防性维护 2、软件维护注意事项3、软件维护技术3.1 程序理解3.2 软件再工程3.3 软件逆向工程 1、软件维护概念和分类 1.1 软件维护概念 IEEE/EIA 12207[ISO/IEC2008]中对软件…

LeetCode35:搜索插入位置

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算…

泉州市工业和信息化局关于开展排查运维安全管理系统安全漏洞的通知

文章目录 引言附件1: 受影响版本和修复方案附件2:漏洞排查处置情况反馈表引言 接国家网络与信息安全信息通报中心通报,一款由北京圣博润高新技术股份有限公司研发的运维安全管理系统(俗称堡垒机)存在命令执行漏洞(CNVD-C-2024-781563、NVDB-CNVDB-2024768604)。攻击者可…

使用k8s管理应用以及java案例

使用k8s管理应用 制作镜像控制器管理podpod数据持久化创建service四层代理创建ingress规则对外发布应用日志与监控应用案例(因无开发代码&#xff0c;最终跑不起来)编写java代码编写 Dockerfile构建 Docker 镜像在 Kubernetes 上运行应用程序创建 Kubernetes 服务service创建in…