写点什么

学习 Java 8 Stream,提升编码能力!

  • 2023-08-14
    福建
  • 本文字数:2413 字

    阅读完需:约 8 分钟

学习Java 8 Stream,提升编码能力!

Java 11 中提供了一组强大的 Stream API,使得我们可以更加方便地对集合进行过滤、排序、映射等操作。本文将介绍 Java 11 Stream API 的使用,包括创建 Stream、中间操作、终止操作等内容。

创建 Stream

在 Java 11 中,可以通过多种方式创建 Stream 对象,包括从集合、数组、文件等数据源创建 Stream。

从集合创建 Stream

可以使用 Collection 接口的 stream()方法或 parallelStream()方法从集合创建 Stream。

以下是一个使用 stream()方法从集合创建 Stream 的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
复制代码

在上面的示例中,我们创建了一个名为 list 的 List 对象,并使用 stream()方法从该 List 对象创建了一个 Stream<Integer>对象。

从数组创建 Stream

可以使用 Arrays 类的 stream()方法从数组创建 Stream。

以下是一个使用 stream()方法从数组创建 Stream 的示例:

int[] array = new int[] {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(array);
复制代码

在上面的示例中,我们创建了一个名为 array 的 int[]数组,并使用 Arrays 类的 stream()方法从该数组创建了一个 IntStream 对象。

从文件创建 Stream

可以使用 Files 类的 lines()方法从文件创建 Stream。

以下是一个使用 lines()方法从文件创建 Stream 的示例:

try {    Stream<String> stream = Files.lines(Paths.get("filename.txt"));} catch (IOException e) {    // handle exception}
复制代码

在上面的示例中,我们使用 Files 类的 lines()方法从文件中读取每一行,并创建了一个 Stream<String>对象。

中间操作

在 Java 11 中,Stream API 提供了多种中间操作,包括过滤、映射、排序等操作,这些操作不会立即执行,而是在终止操作时才会执行。

过滤操作

可以使用 filter()方法对 Stream 中的元素进行过滤操作。

以下是一个使用 filter()方法进行过滤操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream().filter(i -> i % 2 == 0);
复制代码

在上面的示例中,我们使用 filter()方法对 Stream 中的元素进行过滤操作,只保留其中的偶数。

映射操作

可以使用 map()方法对 Stream 中的元素进行映射操作。

以下是一个使用 map()方法进行映射操作的示例:

List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<Integer> stream = list.stream().map(s -> s.length());
复制代码

在上面的示例中,我们使用 map()方法对 Stream 中的字符串元素进行映射操作,将其转换为对应的长度。

排序操作

可以使用 sorted()方法对 Stream 中的元素进行排序操作。

以下是一个使用 sorted()方法进行排序操作的示例:

List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream().sorted();
复制代码

在上面的示例中,我们使用 sorted()方法对 Stream 中的字符串元素进行排序操作,按照字典序进行排序。

去重操作

可以使用 distinct()方法对 Stream 中的元素进行去重操作。

以下是一个使用 distinct()方法进行去重操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 2, 4, 5);
Stream<Integer> stream = list.stream().distinct();
复制代码

在上面的示例中,我们使用 distinct()方法对 Stream 中的整数元素进行去重操作。

截断操作

可以使用 limit()方法对 Stream 中的元素进行截断操作。

以下是一个使用 limit()方法进行截断操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream().limit(3);
复制代码

在上面的示例中,我们使用 limit()方法对 Stream 中的元素进行截断操作,只保留前三个元素。

跳过操作

可以使用 skip()方法对 Stream 中的元素进行跳过操作。

以下是一个使用 skip()方法进行跳过操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream().skip(2);
复制代码

在上面的示例中,我们使用 skip()方法对 Stream 中的元素进行跳过操作,跳过前两个元素。

并行操作

可以使用 parallel()方法将 Stream 转换为并行 Stream,从而进行并行操作。

以下是一个使用 parallel()方法进行并行操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.parallelStream().filter(i -> i % 2 == 0);
复制代码

在上面的示例中,我们使用 parallelStream()方法将 Stream 转换为并行 Stream,并使用 filter()方法进行过滤操作。

终止操作

在 Java 11 中,Stream API 提供了多种终止操作,包括计数、收集、归约等操作,这些操作会触发中间操作的执行,从而得到最终的结果。

计数操作

可以使用 count()方法对 Stream 中的元素进行计数操作。

以下是一个使用 count()方法进行计数操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream().count();
复制代码

在上面的示例中,我们使用 count()方法对 Stream 中的元素进行计数操作,得到 Stream 中元素的个数。

收集操作

可以使用 collect()方法对 Stream 中的元素进行收集操作,将其转换为 List、Set、Map 等集合类型。

以下是一个使用 collect()方法进行收集操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
复制代码

在上面的示例中,我们使用 filter()方法对 Stream 中的元素进行过滤操作,然后使用 collect()方法将其转换为 List 类型。

归约操作

可以使用 reduce()方法对 Stream 中的元素进行归约操作,得到一个最终的结果。

以下是一个使用 reduce()方法进行归约操作的示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (a, b) -> a + b);
复制代码

在上面的示例中,我们使用 reduce()方法对 Stream 中的元素进行归约操作,将其求和得到最终的结果。

总结

Java 11 中的 Stream API 提供了一组强大的操作,可以方便地对集合进行处理。本文介绍了 Java 11 Stream API 的创建、中间操作和终止操作等内容,并提供了示例代码。希望本文能够帮助读者更好地理解 Java 11 Stream API 的使用。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
学习Java 8 Stream,提升编码能力!_Java_互联网工科生_InfoQ写作社区