您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java8中怎么利用Stream创建流
## 前言
Java 8引入的Stream API是处理集合数据的革命性工具,它允许开发者以声明式方式处理数据集合。本文将深入探讨5种核心的Stream创建方式,并通过典型场景示例展示其应用技巧。
## 一、集合创建流(最常用方式)
### 1. Collection接口的默认方法
所有实现`java.util.Collection`接口的类(List/Set/Queue等)都可通过`stream()`方法创建顺序流:
```java
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream(); // 顺序流
Stream<String> parallelStream = list.parallelStream(); // 并行流
// Set创建流示例
Set<Integer> numbers = new HashSet<>(Arrays.asList(1, 2, 3));
Stream<Integer> numStream = numbers.stream();
// Queue创建流示例
Queue<String> queue = new LinkedList<>(Arrays.asList("x", "y", "z"));
Stream<String> queueStream = queue.stream();
IllegalStateException
String[] array = {"Java", "Python", "Go"};
Stream<String> arrayStream = Arrays.stream(array);
// 指定范围[起始索引,结束索引)
Stream<String> rangeStream = Arrays.stream(array, 1, 3); // 输出Python,Go
Java 8为基本类型提供了专门的流实现:
int[] intArray = {1, 2, 3, 4};
IntStream intStream = Arrays.stream(intArray);
double[] doubles = {1.1, 2.2};
DoubleStream doubleStream = Arrays.stream(doubles);
Stream<String> stringStream = Stream.of("A", "B", "C");
// 基本类型会自动装箱
Stream<Integer> intStream = Stream.of(1, 2, 3);
// 1. generate方法
Stream<String> randomStream = Stream.generate(() -> UUID.randomUUID().toString())
.limit(5);
// 2. iterate方法
Stream<Integer> sequence = Stream.iterate(0, n -> n + 2)
.limit(10); // 0,2,4...18
Stream<Object> emptyStream = Stream.empty();
try (Stream<String> lines = Files.lines(Paths.get("data.txt"))) {
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
// 统计文件中的非空行数
long count = Files.lines(Paths.get("log.txt"))
.filter(line -> !line.trim().isEmpty())
.count();
IntStream charStream = "Hello".chars();
Stream<String> wordStream = Pattern.compile(",")
.splitAsStream("a,b,c");
Stream.Builder<String> builder = Stream.builder();
Stream<String> customStream = builder.add("first")
.add("second")
.build();
创建方式 | 适用场景 | 性能特点 |
---|---|---|
集合.stream() | 常规集合操作 | 中等初始化开销 |
Arrays.stream() | 数组处理 | 最优性能 |
Stream.generate() | 无限序列 | 需配合limit使用 |
Files.lines() | 大文件处理 | 低内存占用 |
List<Integer> numbers = /* 大量数据 */;
// 适合并行处理的条件:
// 1. 数据量 > 1万
// 2. 处理逻辑耗时
// 3. 无共享状态
long sum = numbers.parallelStream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n * 2)
.sum();
// 统计ERROR级别的日志行数
Files.lines(Paths.get("app.log"))
.filter(line -> line.contains("ERROR"))
.count();
// 生成100个随机ID
List<String> testIds = Stream.generate(() -> UUID.randomUUID().toString())
.limit(100)
.collect(Collectors.toList());
Stream<String> combined = Stream.concat(
list1.stream(),
list2.stream()
);
Java 8 Stream创建方式多样,主要分为: 1. 集合/数组转换(最常用) 2. Stream静态工厂方法 3. 文件IO生成 4. 特殊构建方式
选择建议:
- 集合数据优先用collection.stream()
- 数组数据用Arrays.stream()
- 大文件用Files.lines()
- 无限流用Stream.iterate()/generate()
正确选择创建方式能提升代码可读性和执行效率。
Stream.toList()
方法”`
注:本文实际约1750字,包含: 1. 7个主要章节 2. 15个代码示例 3. 性能对比表格 4. 3个实际应用案例 5. 扩展阅读建议
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。