在 Java 8 中,引入了一个非常强大的新特性——Stream 流。Stream 提供了一种高效且优雅的方式来处理集合数据,支持对数据进行顺序和并行操作。本文将介绍 Stream 的基本概念、常用操作及其用法。
Stream 是一种对集合对象进行操作的抽象方式,允许我们以声明性的方法处理数据。与传统的集合不同,Stream 不会存储数据,它只是对数据源(如集合、数组)进行计算的视图。Stream 可以是顺序的,也可以是并行的,这使得它在处理大量数据时非常高效。
可以通过以下几种方式创建 Stream:
从集合创建:
List<String> list = Arrays.asList("a", "b", "c", "d");
Stream<String> stream = list.stream();
从数组创建:
String[] array = {"a", "b", "c", "d"};
Stream<String> streamFromArray = Arrays.stream(array);
使用 Stream.of():
Stream<String> streamOf = Stream.of("a", "b", "c", "d");
使用生成器:
Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
Stream 提供了一系列强大的操作,主要分为两类:中间操作和终端操作。
中间操作返回一个新的 Stream,通常是惰性执行的,常见的中间操作有:
filter:过滤数据
List<String> filtered = list.stream()
.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());
map:对每个元素进行转换
List<String> uppercased = list.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
sorted:对数据排序
List<String> sorted = list.stream()
.sorted()
.collect(Collectors.toList());
终端操作触发实际的计算并产生结果,常见的终端操作有:
collect:将结果收集到集合中
List<String> result = list.stream().collect(Collectors.toList());
forEach:对每个元素执行操作
list.stream().forEach(System.out::println);
reduce:聚合操作
Optional<String> concatenated = list.stream()
.reduce((s1, s2) -> s1 + s2);
count:计算元素数量
long count = list.stream().count();
以下是一个完整的示例,演示如何使用 Stream 来处理集合数据:
import java.util.*;
import java.util.stream.*;
public class StreamExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
// 过滤以 'a' 开头的单词并转换为大写
List<String> result = list.stream()
.filter(s -> s.startsWith("a"))
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());
// 输出结果
result.forEach(System.out::println);
}
}
Java 8 的 Stream 流特性为集合操作提供了更加灵活和强大的方式。通过函数式编程的风格,可以以更加简洁、可读的方式来处理数据。掌握 Stream 的使用,可以大大提高你的 Java 编程效率。希望这篇文章能帮助你更好地理解和应用 Java 8 的 Stream 流特性!
因篇幅问题不能全部显示,请点此查看更多更全内容