返回

Java 8 Stream 高级操作 - 揭秘强大的数据处理工具

闲谈

Java 8的Stream API提供了一系列高级操作,使您能够以声明式方式处理数据。这些操作包括filter、map、collect和flatMap。

Filter

filter操作用于过滤数据。您可以使用它来选择满足特定条件的元素。例如,以下代码片段从列表中过滤出所有偶数:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

System.out.println(evenNumbers); // 输出:[2, 4, 6, 8, 10]

Map

map操作用于将数据映射到新值。您可以使用它来转换数据的类型或结构。例如,以下代码片段将列表中的每个元素乘以2:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> doubledNumbers = numbers.stream().map(n -> n * 2).collect(Collectors.toList());

System.out.println(doubledNumbers); // 输出:[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Collect

collect操作用于将数据收集到一个新的数据结构中。您可以使用它来创建列表、集合或其他数据结构。例如,以下代码片段将列表中的所有元素收集到一个字符串中:

List<String> words = Arrays.asList("hello", "world", "!");
String sentence = words.stream().collect(Collectors.joining(" "));

System.out.println(sentence); // 输出:"hello world !"

FlatMap

flatMap操作用于将多个流合并成一个流。您可以使用它来处理嵌套数据结构。例如,以下代码片段将列表中的每个元素映射到一个数组,然后将所有数组合并成一个流:

List<List<Integer>> listOfLists = Arrays.asList(Arrays.asList(1, 2, 3), Arrays.asList(4, 5, 6), Arrays.asList(7, 8, 9));
Stream<Integer> flatStream = listOfLists.stream().flatMap(list -> list.stream());

System.out.println(flatStream.collect(Collectors.toList())); // 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

结论

Stream API的高级操作提供了强大的数据处理能力。您可以使用这些操作来轻松处理复杂的数据结构,并编写更简洁、更易读的代码。