首页 > 图灵资讯 > 技术篇>正文

如何在 Java 8 中使用 Streams

2023-05-17 11:36:02

Java 8 Streams 这是一个非常强大的功能,它提供了一种简单、优雅的处理数据集的方法。通过使用 Streams,可轻松过滤、映射、排序、聚合等操作数据。本教程将介绍 Streams 以及如何处理基本概念 Java 8 中使用 Streams。本教程还包括许多代码示例,以帮助您更好地理解 Streams 工作方法。

如何在 Java 8 中使用 Streams_Java

什么是 Streams?

在 Java 中,Stream 是操作集合元素的接口。它允许我们通过管道操作(Pipeline)处理集合元素,实现过滤、排序、映射、聚合等操作。Stream 它不是一个集合,而是一个类似的集合 Iterator 支持集合连续操作的对象。Stream 不要改变原来的集合,而是在每次操作后返回一个新的集合 Stream 对象。

如何创建 Streams?

在 Java 8 中,可使用 Collection.stream() 或 Collection.parallelStream() 方法来创建 Stream 对象。例如:

List<String> list = Arrays.asList("one", "two", "three", "four", "five");// 创建串行流Streamm<String> stream = list.stream();// 创建并行流Streamm<String> parallelStream = list.parallelStream();

也可以使用 Stream.of() 创建包含指定元素的方法 Stream 对象。例如:

Stream<String> stream = Stream.of("one", "two", "three", "four", "five");

还可以使用 Stream.empty() 创造空的方法 Stream 对象。例如:

Stream<String> emptyStream = Stream.empty();
如何操作 Streams?

在 Java 8 中,Stream 操作数据集合提供了一系列方法,包括中间操作和终止操作。中间操作将返回一个新的 Stream 对象,终止操作将返回非对象 Stream 的结果。

中间操作

用于中间操作 Stream 连续转换和过滤。以下是一些常见的中间操作:

  • filter:过滤符合条件的元素。
  • map:转换元素。
  • flatMap:将一个 Stream 中间的每个元素都转化为新的元素 Stream,然后将这些 Stream 连接形成一个新的连接 Stream。
  • distinct:去除重复元素。
  • sorted:对元素进行排序。
  • peek:通常用于调试和打印日志的元素遍历操作。

以下是一些中间操作的例子:

List<String> list = Arrays.asList("one", "two", "three", "four", "five");// 过滤长度为3的字符串Stream<String> stream = list.stream().filter(s -> s.length() == 3);// 转化为大写Streamm<String> stream = list.stream().map(String::toUpperCase);// 扁平化字符串列表Stream<String> stream = list.stream().flatMap(s -> Stream.of(s.split(""));// 重Stream<String> stream = list.stream().distinct();// Stream排序<String> stream = list.stream().sorted();// list遍历输出.stream().peek(System.out::println).count();
终止操作

用于终止操作 Stream 执行最终操作,返回非 Stream 以下是一些常见的终止操作:

  • forEach:对 Stream 操作中的每个元素。
  • count:返回 Stream 中元素的数量。
  • collect:将 Stream 元素转化为其他形式。
  • reduce:将 Stream 聚合操作中的元素。
  • min:返回 Stream 中最小值。
  • max:返回 Stream 最大值。

以下是一些终止操作的例子:

List<String> list = Arrays.asList("one", "two", "three", "four", "five");// list遍历输出.stream().forEach(System.out::println);// 数字long计算元素 count = list.stream().count();// 将元素转换成 ListList<String> newList = list.stream().collect(Collectors.toList());// 求和int sum = Stream.of(1, 2, 3, 4, 5).reduce(0, (a, b) -> a + b);// 寻求最小值int min = Stream.of(1, 2, 3, 4, 5).min(Integer::compareTo).get();// 寻求最大值int max = Stream.of(1, 2, 3, 4, 5).max(Integer::compareTo).get();
Streams 的并行处理

在 Java 8 中,Streams 提供并行处理功能,集合可分为多个部分,以提高处理效率。并行使用 Streams,只需要使用 Collection.parallelStream() 创建平行并行方法的方法 Stream 对象即可。

以下是一个示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 处理long的普通流量 start = System.currentTimeMillis();int sum1 = list.stream().mapToInt(Integer::intValue).sum();long end = System.currentTimeMillis();System.out.println“串行流处理时间:” + (end - start) + "ms");// 并行流处理startttart = System.currentTimeMillis();int sum2 = list.parallelStream().mapToInt(Integer::intValue).sum();end = System.currentTimeMillis();System.out.println(”并行流处理时间:" + (end - start) + "ms");System.out.println“串行流结果:” + sum1);System.out.println“并行流结果:” + sum2);

输出结果:

串行流处理时间:2ms并行流处理时间:1ms串行流结果:55并行流结果:55
总结

Java 8 Streams 这是一个非常强大的功能,它提供了一种简单、优雅的处理数据集的方法。本教程介绍 Streams 以及如何处理基本概念 Java 8 中使用 Streams。本教程还包含了许多代码示例,以帮助读者更好地理解和应用 Streams。

在使用 Streams 以下几点需要注意:

  1. 尽量避免在 Stream 计算过多,因为这会影响性能。
  2. 并行流处理时,应注意线程安全。
  3. 不要试图在同一个 Stream 对象执行多次终止操作,因为这将导致多次终止操作 IllegalStateException 异常。
  4. 在使用 collect 可用于操作 Collectors 例如,工具提供的方法, toList、toSet 等待,以方便地将元素转化为其他形式。

总的来说,Java 8 Streams 它是一个非常强大和灵活的功能,它可以帮助我们更有效地处理数据集合。如果你还没有尝试过 Streams,希望这个教程能帮助你入门,掌握它的基本用法。

上一篇 java 两总数相除取整 java两个整数相除
下一篇 java 控制器里查找Environment 怎么查java环境

文章素材均来源于网络,如有侵权,请联系管理员删除。