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

获取 Stream 对象的方式

在 Java 中获取 Stream 对象的方式多种多样,涵盖了集合、数组、文件、生成器等场景。以下是 12 种常见获取 Stream 的方式及详细说明:


1. 从集合获取 Stream

所有实现 Collection 接口的类(如 ListSetQueue)均可直接通过 stream()parallelStream() 方法获取流。

List<String> list = Arrays.asList("A", "B", "C");// 获取顺序流
Stream<String> stream = list.stream();// 获取并行流
Stream<String> parallelStream = list.parallelStream();

2. 从数组获取 Stream

通过 Arrays.stream()Stream.of() 将数组转换为流。

String[] array = {"Java", "Python", "C++"};// 方式1:Arrays.stream()
Stream<String> stream1 = Arrays.stream(array);// 方式2:Stream.of()
Stream<String> stream2 = Stream.of(array);// 基本类型数组(避免装箱开销)
int[] intArray = {1, 2, 3};
IntStream intStream = Arrays.stream(intArray);

3. 从文件获取 Stream

使用 Files.lines() 逐行读取文件内容生成流。

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;try (Stream<String> lines = Files.lines(Paths.get("data.txt"))) {lines.forEach(System.out::println);
} catch (IOException e) {e.printStackTrace();
}

4. 从 I/O 资源获取 Stream

BufferedReaderlines() 方法生成流。

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.stream.Stream;try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {Stream<String> lines = reader.lines();lines.forEach(System.out::println);
} catch (IOException e) {e.printStackTrace();
}

5. 生成无限流

通过 Stream.iterate()Stream.generate() 生成无限序列。

// 生成斐波那契数列的前10项
Stream.iterate(new int[]{0, 1}, fib -> new int[]{fib[1], fib[0] + fib[1]}).limit(10).map(fib -> fib[0]).forEach(System.out::println);// 生成随机数流
Stream<Double> randoms = Stream.generate(Math::random).limit(5);

6. 通过 Stream.Builder 构建流

动态添加元素生成流。

Stream.Builder<String> builder = Stream.builder();
builder.add("Apple").add("Banana").add("Cherry");
Stream<String> stream = builder.build();

7. 从字符串分割获取 Stream

使用 Pattern.splitAsStream() 分割字符串生成流。

import java.util.regex.Pattern;
import java.util.stream.Stream;Stream<String> words = Pattern.compile(", ").splitAsStream("Java, Python, C++");
words.forEach(System.out::println); // 输出: Java Python C++

8. 合并多个流

通过 Stream.concat() 合并两个流。

Stream<String> stream1 = Stream.of("A", "B");
Stream<String> stream2 = Stream.of("C", "D");
Stream<String> merged = Stream.concat(stream1, stream2); // A, B, C, D

9. 基本类型流

通过 IntStreamLongStreamDoubleStream 处理基本数据类型。

// 生成范围流
IntStream range = IntStream.range(1, 5); // 1, 2, 3, 4// 从集合转换
List<Integer> numbers = Arrays.asList(1, 2, 3);
IntStream intStream = numbers.stream().mapToInt(Integer::intValue);

10. 空流

通过 Stream.empty() 创建空流。

Stream<String> emptyStream = Stream.empty();

11. 单元素流

通过 Stream.of() 创建包含单个元素的流。

Stream<String> singleElementStream = Stream.of("Hello");

12. 其他第三方库

GuavaApache Commons 提供的工具类:

// Guava 示例:从 Iterable 创建流
Iterable<String> iterable = Lists.newArrayList("A", "B");
Stream<String> guavaStream = StreamSupport.stream(iterable.spliterator(), false);

总结:Stream 获取方式速查表

场景方法/类示例
集合Collection.stream()list.stream()
数组Arrays.stream()Stream.of()Arrays.stream(array)
文件Files.lines()Files.lines(Paths.get("data.txt"))
I/O 资源BufferedReader.lines()reader.lines()
无限序列Stream.iterate() / generate()Stream.iterate(0, n -> n + 1)
动态构建流Stream.BuilderStream.builder().add("A").build()
字符串分割Pattern.splitAsStream()Pattern.compile(",").splitAsStream(s)
合并流Stream.concat()Stream.concat(s1, s2)
基本类型流IntStream / LongStreamIntStream.range(1, 5)
空流Stream.empty()Stream.empty()
单元素流Stream.of()Stream.of("Hello")
第三方库支持Guava / Apache CommonsStreamSupport.stream(iterable)

相关文章:

  • 内存管理(第五、六章)
  • RocketMQ 深度解析:消息中间件核心原理与实践指南
  • AUTOSAR图解==>AUTOSAR_SRS_ICUDriver
  • 关于 Web 安全:5. 认证绕过与权限控制分析
  • 前端面经-虚幻引擎5
  • 嵌入式项目之QT页面制作
  • Python笔记:windows下编译python3.8.20
  • 股票程序化交易-使用python获取新浪财经期货行情数据
  • 如何理解Pytorch中前向传播的计算过程
  • dify-plugin-daemon的.env配置文件
  • Java 流程控制:从「小白」到「能用」的 while 循环指南
  • DAY34
  • 市场需求文档撰写
  • 超大数值减法
  • 解决论文中字体未嵌入的问题
  • STM32中的SPI通信协议
  • SprigBoot整合rocketmq-v5-client-spring-boot
  • CMake从入门到实战:现代C++项目构建指南
  • Android组件化框架设计与实践
  • Python60日基础学习打卡D35
  • 品牌网站建设找顺的/seo排名培训公司
  • 麻章手机网站建设/电脑零基础培训班
  • 祁连网站建设公司/neotv
  • 外贸建站行业好做吗/seo网址
  • 杭州个人网站建设/百度指数代表什么意思
  • 国外包装设计网站大全/seo排名优化什么意思