Java Stream API详解

一、核心概念

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的优势

  1. 声明式编程:更关注“做什么”而不是“怎么做”
  2. 链式调用:操作可以串联,代码更流畅
  3. 函数式编程:支持 lambda 表达式,代码更简洁
  4. 惰性求值:中间操作不会立即执行,提高效率
  5. 并行处理:容易实现并行计算

六、注意事项

  1. 流不可复用:终端操作执行后,流对象失效
  2. 性能考虑:对于简单遍历,传统 for 循环可能更高效
  3. 调试困难Stream 链式操作调试相对困难
  4. 可读性:过于复杂的 Stream 操作可能降低可读性

Stream API是Java 8的一个重要特性,它提供了一种高效且易于使用的方式来处理集合数据,特别适用于复杂的数据处理场景。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值