一、核心概念
Stream API是从Java 8引入的一个强大工具,用于处理集合数据。它提供了一种声明式的方式来操作集合,支持链式调用和并行处理。
关键概念:
Stream(流):代表一个数据序列,支持聚合操作- 中间操作(
Intermediate Operations):返回一个新的流,可以链式调用(如filter,map,sorted) - 终端操作(
Terminal Operations):触发流的处理并返回结果(如forEach,collect,reduce)
二、创建Stream的方式
// 1. 从集合创建
List<String> list = Arrays.asList("Java", "Python", "C++");
Stream<String> stream1 = list.stream();
// 2. 从数组创建
String[] array = {"Java", "Python", "C++"};
Stream<String> stream2 = Arrays.stream(array);
// 3. 使用Stream.of()创建
Stream<String> stream3 = Stream.of("Java", "Python", "C++");
// 4. 创建无限流
Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
三、常用中间操作
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
// filter: 过滤元素
List<String> filter = languages.stream()
.filter(s -> s.startsWith("J"))
.collect(Collectors.toList());
// map: 转换元素
List<Integer> lengths = languages.stream()
.map(String::length)
.collect(Collectors.toList());
// sorted: 排序
List<String> sorted = languages.stream()
.sorted()
.collect(Collectors.toList());
// distinct: 去重
List<String> distinct = languages.stream()
.distinct()
.collect(Collectors.toList());
四、常用终端操作
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
// forEach: 遍历
languages.stream().forEach(System.out::println);
// collect: 收集结果
List<String> filtered = languages.stream()
.filter(s -> s.length() > 4)
.collect(Collectors.toList());
// reduce: 归约
Optional<String> concatenated = languages.stream()
.reduce((s1, s2) -> s1 + "," + s2);
// count: 计数
long count = languages.stream()
.filter(s -> s.startsWith("J"))
.count();
// findFirst: 查找第一个
Optional<String> first = languages.stream()
.filter(s -> s.startsWith("P"))
.findFirst();
五、Stream的优势
- 声明式编程:更关注“做什么”而不是“怎么做”
- 链式调用:操作可以串联,代码更流畅
- 函数式编程:支持
lambda表达式,代码更简洁 - 惰性求值:中间操作不会立即执行,提高效率
- 并行处理:容易实现并行计算
六、注意事项
- 流不可复用:终端操作执行后,流对象失效
- 性能考虑:对于简单遍历,传统
for循环可能更高效 - 调试困难:
Stream链式操作调试相对困难 - 可读性:过于复杂的
Stream操作可能降低可读性
Stream API是Java 8的一个重要特性,它提供了一种高效且易于使用的方式来处理集合数据,特别适用于复杂的数据处理场景。
1755

被折叠的 条评论
为什么被折叠?



