如何用LSTM预测Java服务OOM?:手把手教你训练时序异常检测模型
2026/1/3 10:39:14
本节我们将学习各种创建Stream的方法,并通过示例掌握何时使用哪种方式。
✅ 了解Stream的多种来源
✅ 掌握工厂方法(Factory Methods)
✅ 掌握从集合、数组、字符串等常用类型创建流
✅ 知道特殊情况如何创建空流、无限流等
你之前最常用的方式就是:
List<String>list=List.of("Java","Python","Go");Stream<String>stream=list.stream();这是最基础也最直观的一种方式 —— 来自Collection接口的stream()方法。
Stream工厂方法大合集(Stream API提供)| 方法 | 用途 | 示例代码 |
|---|---|---|
Stream.of(...) | 从一个或多个元素构造流(支持 varargs) | Stream.of(1, 2, 3) |
Stream.empty() | 构造一个空流 | Stream.empty() |
Stream.generate() | 使用Supplier无限生成元素 | Stream.generate(Math::random) |
Stream.iterate() | 使用初始值和函数构造一个无限流 | Stream.iterate(0, n -> n + 1) |
Stream.builder() | 使用构建器一步步手动添加元素构造流 | 见下方示例 |
Stream.of(...)– 多个值转流Stream<String>languages=Stream.of("Java","Python","Kotlin");languages.forEach(System.out::println);Stream.generate()– 无限流(记得限制)Stream<Double>randoms=Stream.generate(Math::random).limit(5);randoms.forEach(System.out::println);Stream.iterate()– 无限递增流Stream<Integer>evens=Stream.iterate(0,n->n+2).limit(5);evens.forEach(System.out::println);Stream.builder()– 手动添加元素构建流Stream<String>stream=Stream.<String>builder().add("Apple").add("Banana").add("Cherry").build();stream.forEach(System.out::println);| 来源 | 方法/说明 | 示例代码 |
|---|---|---|
| 数组 | 使用Arrays.stream() | Arrays.stream(new int[]{1,2,3}) |
| Iterator | 使用StreamSupport.stream() | 见下方说明 |
| 字符串字符流 | 使用chars()→IntStream | "hello".chars() |
| 按行读取文件 | Files.lines(Path) | Files.lines(Paths.get("file.txt")) |
| 使用正则分割字符串 | Pattern.compile(regex).splitAsStream() | 见下方示例 |
| 随机数流 | new Random().ints()等 | new Random().ints(5) |
IntStreamchars="hello".chars();chars.forEach(ch->System.out.println((char)ch));Stream<String>words=Pattern.compile(",\\s*").splitAsStream("apple, banana, cherry");words.forEach(System.out::println);IOException)try(Stream<String>lines=Files.lines(Paths.get("data.txt"))){lines.forEach(System.out::println);}有时你需要根据条件返回一个空流:
Stream<String>stream=list.isEmpty()?Stream.empty():list.stream();比返回null更优雅,避免空指针异常(NPE)。
| 类型 | 创建方式 |
|---|---|
| Collection | collection.stream() |
| 数组 | Arrays.stream(array) |
| 值列表 | Stream.of(...) |
| 无限流 | Stream.generate()/Stream.iterate() |
| 手动构造 | Stream.builder() |
| 字符串 | "abc".chars() |
| 正则拆分字符串 | Pattern.compile(...).splitAsStream(...) |
| 文件 | Files.lines(Path) |
| 随机数 | new Random().ints() |
| 空流 | Stream.empty() |
| Iterator | StreamSupport.stream(..., false)(进阶) |
Collection.stream()和Stream.of()开始练习generate()和iterate()制作模拟数据或流控制结构