Java如何从集合和数组获取Stream流的方法

 更新时间:2025年01月21日 15:35:20   作者:qq_44199605  
本文详细介绍了Java中如何从集合、数组等数据结构获取Stream流,包括使用Collection接口的stream()和parallelStream()方法、Arrays类的stream()方法、Stream.of()方法以及基本类型数组的流方法等

Java从集合和数组获取Stream流

在 Java 的编程过程中,Stream 流是处理集合、数组等数据结构的重要工具,它提供了高效且简洁的操作方式。

本文将详细介绍如何从集合、数组等数据结构中获取 Stream 流。

1. 从集合获取 Stream

Java 的 Collection 接口为我们提供了直接获取 Stream 的方法:

方法

  • stream():获取一个顺序流。
  • parallelStream():获取一个并行流。

示例代码

import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        // 创建集合
        List<String> list = Arrays.asList("A", "B", "C");

        // 获取顺序流
        Stream<String> stream = list.stream();
        stream.forEach(System.out::println);

        // 获取并行流
        Stream<String> parallelStream = list.parallelStream();
        parallelStream.forEach(System.out::println);
    }
}

输出结果:

A
B
C

2. 从数组获取 Stream

Arrays 类提供了静态方法 stream() 用于从数组生成流。

方法

  • Arrays.stream(T[] array):将整个数组转换为顺序流。
  • Arrays.stream(T[] array, int startInclusive, int endExclusive):将数组的部分范围转换为流。

示例代码

import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        // 创建数组
        String[] array = { "A", "B", "C", "D" };

        // 将整个数组转换为流
        Stream<String> stream = Arrays.stream(array);
        stream.forEach(System.out::println);

        // 将数组部分范围转换为流
        Stream<String> partialStream = Arrays.stream(array, 1, 3);
        partialStream.forEach(System.out::println); // 输出 B, C
    }
}

输出结果:

A
B
C
D
B
C

3. 使用 Stream.of 获取流

Stream 接口提供了静态方法 Stream.of(),可以直接从元素或数组生成流。

示例代码

import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        // 使用 Stream.of 从元素生成流
        Stream<String> stream = Stream.of("A", "B", "C");
        stream.forEach(System.out::println);

        // 使用 Stream.of 从数组生成流
        String[] array = { "X", "Y", "Z" };
        Stream<String> arrayStream = Stream.of(array);
        arrayStream.forEach(System.out::println);
    }
}

输出结果:

A
B
C
X
Y
Z

4. 从基本类型数组获取 Stream

对于基本类型数组(如 int[]double[]),可以使用专门的流方法来生成流。

方法

  • IntStream.of(int... values)
  • DoubleStream.of(double... values)
  • Arrays.stream(int[] array)

示例代码

import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        // 使用 IntStream.of
        IntStream intStream = IntStream.of(1, 2, 3, 4);
        intStream.forEach(System.out::println);

        // 使用 Arrays.stream
        int[] intArray = { 5, 6, 7, 8 };
        IntStream arrayStream = Arrays.stream(intArray);
        arrayStream.forEach(System.out::println);
    }
}

输出结果:

1
2
3
4
5
6
7
8

5. 从 Map 获取 Stream

Map 不属于 Collection 接口的子类,因此不能直接调用 stream() 方法。

我们可以通过 entrySet()keySet()values() 间接获取流。

示例代码

import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        // 创建 Map
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        map.put("C", 3);

        // 获取键流
        Stream<String> keyStream = map.keySet().stream();
        keyStream.forEach(System.out::println);

        // 获取值流
        Stream<Integer> valueStream = map.values().stream();
        valueStream.forEach(System.out::println);

        // 获取键值对流
        Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();
        entryStream.forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));
    }
}

输出结果:

A
B
C
1
2
3
A: 1
B: 2
C: 3

总结

数据类型方法
集合stream() 或 parallelStream()
数组Arrays.stream() 或 Stream.of()
基本类型数组IntStream.of() 或 Arrays.stream()
Map使用 entrySet()、keySet()、values()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nacos客户端配置中心缓存动态更新实现源码

    Nacos客户端配置中心缓存动态更新实现源码

    这篇文章主要为大家介绍了Nacos客户端配置中心缓存动态更新实现源码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • Java中StringBuilder字符串类型的操作方法及API整理

    Java中StringBuilder字符串类型的操作方法及API整理

    Java中的StringBuffer类继承于AbstractStringBuilder,用来创建非线程安全的字符串类型对象,下面即是对Java中StringBuilder字符串类型的操作方法及API整理
    2016-05-05
  • SpringBoot自定义定时任务的实现示例

    SpringBoot自定义定时任务的实现示例

    本文主要介绍了SpringBoot自定义定时任务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • 详解IDEA2021.2安装后的配置及重装问题

    详解IDEA2021.2安装后的配置及重装问题

    这篇文章主要介绍了IDEA2021.2安装后的配置及重装,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • JAVA异常信息Exception e及e的相关方法解读

    JAVA异常信息Exception e及e的相关方法解读

    这篇文章主要介绍了JAVA异常信息Exception e及e的相关方法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java 数据结构 冒泡排序实现代码

    java 数据结构 冒泡排序实现代码

    这篇文章主要介绍了java 数据结构 冒泡排序的相关资料,并附实例代码,有需要的小伙伴可以参考下
    2016-09-09
  • SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介绍了SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 一文解读Spring Bean的生命周期

    一文解读Spring Bean的生命周期

    这篇文章主要给大家详细解读Spring Bean的生命周期,文中有详细的代码示例,对我们学习Spring Bean的生命周期有一定的帮助,感兴趣的同学跟着小编一起来学习吧
    2023-07-07
  • 详解SpringMVC中使用Interceptor拦截器

    详解SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理,这篇文章主要介绍了详解SpringMVC中使用Interceptor拦截器,有兴趣的可以了解一下。
    2016-12-12
  • SpringBoot创建动态定时任务的几种方式小结

    SpringBoot创建动态定时任务的几种方式小结

    SpringBoot提供了多种实现定时任务的方式,包括使用@Scheduled注解、SchedulingConfigurer接口、TaskScheduler接口和Quartz框架,@Scheduled适合简单的定时任务,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-10-10

最新评论