Java Streams API 是 Java 8 中引入的一套新的抽象,它允许以声明性方式处理数据集合。通过 Java Stream API,你可以对集合进行复杂的查询和数据处理,而无需明确地管理迭代数据集合的过程。
首先,要使用 Stream,你需要一个数据源,比如集合、数组或者I/O channel。然后,你对这个数据源执行一系列操作,这些操作可以是中间操作(如 filter, map, sorted 等)或者终端操作(如 collect, forEach, reduce 等)。
下面是一些 Java Stream API 的基本使用示例:
创建 Stream
// 从集合创建 Stream
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
Stream<String> myStream = myList.stream();
// 从数组创建 Stream
String[] myArray = new String[]{"a1", "a2", "b1", "c2", "c1"};
Stream<String> myStreamFromArray = Arrays.stream(myArray);
// 创建无限流
Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
中间操作
// filter 方法用于过滤出符合条件的元素
Stream<String> streamWithFilter = myStream.filter(s -> s.startsWith("c"));
// map 方法用于将元素按照给定的函数进行转换
Stream<String> upperCasedStream = myStream.map(String::toUpperCase);
// sorted 方法用于对元素进行排序
Stream<String> sortedStream = myStream.sorted();
终端操作
// forEach 用来遍历 Stream 中的元素
myStream.forEach(System.out::println);
// collect 方法用来将 Stream 转换成其他形式,比如集合
List<String> filteredList = myStream.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());
// reduce 方法用来进行归约操作,比如求和、求最大值或最小值
Optional<String> concatenatedString = myStream.reduce((s1, s2) -> s1 + "#" + s2);
组合使用
// 将字符串转换成大写并过滤掉以"C"开头的字符串,然后打印出来
myList.stream()
.map(String::toUpperCase)
.filter(s -> !s.startsWith("C"))
.forEach(System.out::println);
这只是流操作的冰山一角。Java Stream API 非常强大,有很多功能和操作可以使用,比如 flatMap、distinct、limit、peek 等。正确地利用 Streams 可以编写出简洁、高效和易于维护的代码。