Java8流是什么?有哪些常用操作?

Java 8 已经推出八年多了,2014 年发布的许多功能已经延续到 2022 年,其中最突出的功能之一是 Java 流。本文我将介绍什么是 Java 流,何时使用它们,流问题怎么解决,并简要介绍常见的 Java 流操作。

什么是是 Java 中的流?

Java 流支持对元素流进行函数式操作,流是按某种顺序应用于数据的不可变函数集合的抽象,流不是可以存储元素的集合。

流和结构之间最重要的区别是流不保存数据,例如,您不能指向流中存在特定元素的位置,您只能指定对该数据进行操作的函数,并且在对一个流进行操作时,会影响到原来的流。

请注意,不要将本文中的流与 Java I/O 包中的流(如 InputStream、OutputStream 等)混淆。

何时使用 Java 流

Java 流表示数据流经的管道以及对数据进行操作的函数,此实例中的管道由流源、后跟零个或多个中间操作和终端操作组成。

因此,流可用于任何数量的涉及数据驱动功能的应用程序。

Java流的特点

  • 流不是数据结构,而是从集合、数组或 I/O 通道获取输入。
  • 流不改变原始数据结构,它们只根据流水线方法提供结果。
  • 每个中间操作都被延迟执行并返回一个流作为结果,因此可以流水线化各种中间操作。终端操作标记流的结尾并返回结果。

流上的不同操作

中间操作:

  • map: map 方法用于返回一个流,该流由将给定函数应用于此流的元素的结果组成。
  • filter: filter 方法用于根据作为参数传递的 Predicate 选择元素。
  • sorted: sorted方法用于对流进行排序。

末端操作:

  • collect: collect 方法用于返回对流执行的中间操作的结果。
  • forEach: forEach 方法用于遍历流中的每个元素。
  • reduce: reduce 方法用于将流的元素减少为单个值。

代码示例

1、过滤

  • 用于根据条件从 Collection 中删除值。
  • filter()方法用于根据条件过滤 Collection 的元素。只保留匹配的元素。

过滤出所有奇数:

List<Integer> nums = numList.stream()
        .filter(n -> n % 2 != 0)
        .collect(Collectors.toList());

2、预处理

  • 集合中的每个值都需要就地更改时很有用。
  • map()方法用于将函数应用于 Collection 的每个元素并返回计算值的新 Collection。

将数字加1:

List<Integer> newNums = nums.stream()
        .map(n -> n + 1)
        .collect(Collectors.toList());

3、排序

  • 对 Collection 的元素进行排序。
  • sorted()方法用于对 Collection 的元素进行排序。

通常,Collections.sort() 足以对集合进行排序。如果我们想在它后面进行另一个操作,我们可以专门使用 sorted() 。

List<Integer> newNums = nums.stream()
        .sorted()
        .collect(Collectors.toList());

猜你喜欢

转载自blog.csdn.net/weixin_43025343/article/details/132356620
今日推荐