Java8 Stream API 详细使用方法与操作技巧指南

  

Java8 Stream API 详细使用方法与操作技巧指南

什么是Java8 Stream API

Java8 Stream是用于处理集合数据的新操作API,提供了一种更加便捷的、并行化的数据处理方式。它可以优雅地处理数据集合中的数据,也可以高效地并行处理大量的数据。

Stream 本身是不存储数据的,其操作也不会改变源数据,相反,Stream 的每一个操作都会返回一个新的 Stream 对象,最终的操作才会触发实际的计算,称之为终端操作。

Stream 的基本使用

创建 Stream

Stream 可以从多种数据源中创建,如集合、数组、生成器函数等。

  1. 从集合创建Stream
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
  1. 从数组创建Stream
int[] nums = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(nums);

中间操作

中间操作是返回 Stream 的操作,包括过滤、映射、排序等。

  1. 过滤操作
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.filter(i -> i % 2 == 0).forEach(System.out::println);
  1. 映射操作
List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream();
stream.map(String::toUpperCase).forEach(System.out::println);

终端操作

终端操作是触发 Stream 实际计算的操作,包括 forEach、collect、reduce 等。

  1. forEach 操作
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.forEach(System.out::println);
  1. collect 操作
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
List<Integer> evens = stream.filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(evens);

示例说明

示例1: 对一个集合进行过滤操作,仅留下其中的偶数,并对其进行求和操作。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
int sum = stream.filter(i -> i % 2 == 0).mapToInt(Integer::intValue).sum();
System.out.println(sum); // 6

示例2:对学生成绩进行统计,包括学生平均分、最高分、最低分等。

List<Integer> scores = Arrays.asList(70, 80, 85, 90, 95);
IntSummaryStatistics stats = scores.stream().mapToInt(Integer::intValue).summaryStatistics();
System.out.println("平均分:" + stats.getAverage());
System.out.println("最高分:" + stats.getMax());
System.out.println("最低分:" + stats.getMin()); 

总结

Java8 Stream 提供了一种新的、更加便捷、高效的数据处理方式。在使用时,要熟悉其基本使用方法、中间操作和终端操作,同时掌握多种数据源的创建方式和常见的操作技巧。

相关文章