什么是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,我们可以以声明式的方式操作数据,而不用编写繁琐的迭代代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值