答案:Java 8的Stream API提供声明式处理集合数据的方式,支持链式操作。通过stream()或of()创建流,常用中间操作如filter、map、sorted可返回新流,终结操作如collect、forEach触发计算并生成结果,典型应用如筛选年龄大于18的用户姓名并转为大写收集为列表,核心特性是惰性执行,提升大数据处理效率。

Java 8引入的Stream API为集合数据的处理带来了函数式编程的便利。它允许开发者以声明式方式对集合进行过滤、映射、排序等操作,代码更简洁且可读性更强。Stream不会修改原始数据源,而是生成一个新的流或结果。
创建Stream流
要使用Stream API,首先需要从集合或其他数据源创建一个流。
-
从集合创建:大多数集合类都提供了stream()方法。例如:List
list = Arrays.asList("a", "b"); Stream stream = list.stream(); -
从数组创建:使用Arrays.stream(array)或Stream.of()。例如:Stream
stream = Stream.of(1, 2, 3); - 空流或无限流:Stream.empty()创建空流;Stream.iterate()和Stream.generate()可用于生成无限流,常配合limit()使用。
常用中间操作
中间操作返回一个新的Stream,可以链式调用多个操作。
- filter(Predicate): 按条件筛选元素。例如:stream.filter(s -> s.length() > 2)
- map(Function): 将每个元素转换成另一个对象。例如:list.stream().map(String::toUpperCase)
-
flatMap(Function): 将流中的每个元素展开为多个元素。适用于处理嵌套结构,如将List
- >扁平化为List
。 - sorted(): 对流中元素排序,默认自然顺序,也可传入Comparator。例如:stream.sorted(Comparator.comparing(String::length))
- distinct(): 去除重复元素,基于equals方法判断。
- limit(n): 截取前n个元素;skip(n): 跳过前n个元素。
常用终结操作
终结操作触发实际计算并产生结果,之后流无法再被使用。
立即学习“Java免费学习笔记(深入)”;
- forEach(Consumer): 遍历每个元素,常用于打印或执行副作用操作。
- collect(Collector): 将流转换为集合或其他结构。常见用法:Collectors.toList()、toSet()、toMap()、joining()等。
- reduce(BinaryOperator): 将元素逐个合并为一个值,如求和、拼接字符串。
- match操作:anyMatch()、allMatch()、noneMatch()用于判断是否满足条件,返回boolean。
- find操作:findFirst()返回第一个元素;findAny()返回任意元素(并行流中更高效)。
实际应用示例
假设有一个用户列表,想筛选年龄大于18的用户,提取姓名并转为大写,最后收集为列表:
Listusers = ...; List result = users.stream() .filter(u -> u.getAge() > 18) .map(User::getName) .map(String::toUpperCase) .collect(Collectors.toList());
这个例子展示了典型的Stream链式调用流程:数据源 → 中间操作 → 终结操作。
基本上就这些。掌握Stream API的关键是理解其惰性执行机制——中间操作不会立即执行,只有遇到终结操作时才会开始处理数据流。这使得Stream在处理大数据集时更加高效。










