Java Stream API 是 Java 8 引入的一个重要特性,它提供了函数式编程风格的处理集合元素的方法,可以让你以声明式的方式来操作数据。下面是一些关键点和用法总结:
-
Stream 的创建:
- 从集合创建 Stream:
List<String> list = ...; Stream<String> stream = list.stream();
- 从数组创建 Stream:
String[] array = ...; Stream<String> stream = Arrays.stream(array);
- 从集合创建 Stream:
-
中间操作:
filter(Predicate<T> predicate)
:过滤流中的元素。map(Function<T, R> mapper)
:将流中的元素映射为另一个流。flatMap(Function<T, Stream<R>> mapper)
:将流中的每个值替换成另一个流,然后将所有的流连接成一个流。distinct()
:去除重复元素。sorted()
或sorted(Comparator<T> comparator)
:排序流中的元素。
-
终止操作:
forEach(Consumer<T> action)
:遍历流中的元素。collect(Collector<T,A,R> collector)
:收集流中的元素到集合或其他形式的数据结构。reduce(T identity, BinaryOperator<T> accumulator)
:将流中的元素归约到一个值。anyMatch(Predicate<T> predicate)
:检查是否至少有一个元素满足条件。allMatch(Predicate<T> predicate)
:检查是否所有元素都满足条件。noneMatch(Predicate<T> predicate)
:检查是否没有元素满足条件。findFirst()
:返回流中的第一个元素(Optional)。count()
:返回流中元素的数量。
-
并行流:
- 使用
parallelStream()
创建并行流,可以利用多核处理器提高处理速度。
- 使用
-
方法引用:
- 可以使用方法引用代替 Lambda 表达式,例如
list.stream().map(String::toUpperCase)
- 可以使用方法引用代替 Lambda 表达式,例如
示例代码:
java
import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Tom", "Jerry", "Spike", "Tyke");
// 过滤长度大于3的名字
names.stream()
.filter(name -> name.length() > 3)
.forEach(System.out::println);
// 映射为大写并收集到列表
List<String> upperCaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
// 并行流计算总长度
long totalLength = names.parallelStream()
.mapToInt(String::length)
.sum();
System.out.println("Total length of names: " + totalLength);
}
}
以上就是 Java Stream API 的基本用法和一些常见操作的总结。