清华主页 - 清华新闻 - 综合时讯 - 正文

Java 8 Stream API

文章目录。

  • Java 8 Stream API。
  • 1. Stream。
  • 2. Stream 的创建。
  • 3. 常见的 Stream 操作。
    • 3.1 中间操作。
    • 3.2 终止操作。
  • 4. Stream 并行操作。

Java 8 Stream API。

  • Java 8 引入了。 Stream API。,使得对集合类(如。 List。、。Set。等)操作变得更加简洁直观。Stream API 主要目的是简化集合数据的处理,特别是支持。 函数式编程。操作风格。
  • Stream 您可以使用声明式集合操作,而不是传统的命令方式。

1. Stream。

  • 在 Java 8 中,Stream 处理数据集(如。 List。、。Set。、。Map。等)工具,它允许你在不修改集合本身的情况下,通过一系列操作(过滤、映射、聚合等)处理数据。
  • Stream 是一个。流式。的、。单向。#xfff0的数据结构&c;这意味着你一次只能处理一个元素,而且每次处理后流量都会产生新的流量对象,原始流不会改变。

2. Stream 的创建。

Stream ࿱可以通过以下方式创建a;

  • 从集合创建 Stream。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;Stream。stream。 =list。.。stream。(。)。;
  • 从数组创建 Stream。

    String。[。]。array。 ={ 。"apple","banana","cherry"}。;Stream。stream。 =Arrays。.。stream。(。array。)。;
  • 使用 Stream.of() 创建 Stream。

    Stream。stream。 =Stream。.。of。(。"apple","banana","cherry")。;

3. 常见的 Stream 操作。

  • Stream API 提供两种操作:中间操作。和。终止操作。

3.1 中间操作。

  • 惰性操作(中间操作;Lazy),它们不会立即执行,在触发终止操作之前,,整个流程的计算将开始实施。常见的中间操作包括:

  • filter。:用于过滤流中的元素,返回合格元素。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry","date")。;List。filteredList。 =list。.。stream。(。)。.。filter。(。s。 ->s。.。startsWith。(。"a")。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。filteredList。)。;// 输出: [apple]。
  • map。:通过函数将流中的元素转换为另一种元素(通常是映射操作)。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;List。upperCaseList。 =list。.。stream。(。)。.。map。(。String。::。toUpperCase。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。upperCaseList。)。;// 输出: [APPLE, BANANA, CHERRY]。
  • distinct。:去除重复元素。

    List。list。 =Arrays。.。asList。(。"apple","banana","apple","cherry")。;List。distinctList。 =list。.。stream。(。)。.。distinct。(。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。distinctList。)。;// 输出: [apple, banana, cherry]。
  • sorted。:对流中的元素进行排序。

    List。list。 =Arrays。.。asList。(。"banana","apple","cherry")。;List。sortedList。 =list。.。stream。(。)。.。sorted。(。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。sortedList。)。;// 输出: [apple, banana, cherry]。
  • flatMap。:将流中的每个元素映射成多个元素,然后将所有这些元素合并成一个流。

    List。>listOfLists。 =Arrays。.。asList。(。Arrays。.。asList。(。"apple","banana")。,Arrays。.。asList。(。"cherry","date")。)。;List。flatMappedList。 =listOfLists。.。stream。(。)。.。flatMap。(。List。::。stream。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。flatMappedList。)。;// 输出: [apple, banana, cherry, date]。

3.2 终止操作。

终止操作是激活流计算的操作,调用终止操作时,流量将开始并计算。常见的终止操作包括:

  • collect。:收集流中的元素,是最常用的终止操作。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;List。result。 =list。.。stream。(。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。result。)。;// 输出: [apple, banana, cherry]。
  • forEach。:操作对流中的每个元素,通常用于打印。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;list。.。stream。(。)。.。forEach。(。System。.。out。::。println。)。;// 输出:。// apple。// banana。// cherry。
  • reduce。:用于累积或合并对流中的元素,通常用于求和、求最小值或求最大值。

    List。numbers。 =Arrays。.。asList。(。1。,2。,3。,4。,5。)。;int。sum。 =numbers。.。stream。(。)。.。reduce。(。0,Integer。::。sum。)。;System。.。out。.。println。(。sum。)。;// 输出: 15。
  • anyMatch。:检查流中的任何元素是否符合指定条件。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;boolean。hasApple。 =list。.。stream。(。)。.。anyMatch。(。s。 ->s。.。equals。(。"apple")。)。;System。.。out。.。println。(。hasApple。)。;// 输出: true。
  • allMatch。:检查流中的所有元素是否符合指定条件。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;boolean。allStartWithA。 =list。.。stream。(。)。.。allMatch。(。s。 ->s。.。startsWith。(。"a")。)。;System。.。out。.。println。(。allStartWithA。)。;// 输出: false。
  • count。:计算流中元素的数量。

    List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;long。count。 =list。.。stream。(。)。.。count。(。)。;System。.。out。.。println。(。count。)。;// 输出: 3。

4. Stream 并行操作。

  • Stream 还提供了。并行流。,它可以将计算任务分配到多个线程以加速处理。在调用。 parallel()。方法后,流量操作将在多个线程中并行执行,从而提高大数据处理的性能。
List。numbers。 =Arrays。.。asList。(。1。,2。,3。,4。,5。,6。)。;int。sum。 =numbers。.。parallelStream。(。)。.。reduce。(。0,Integer。::。sum。)。;System。.。out。.。println。(。sum。)。;// 输出: 21。
  • 并行流适用于数据量大的场景,但由于线程管理的成本,小数据集可能会降低性能。所以,需要根据具体情况来判断是否使用并行流。

2025-06-24 12:10:03

相关新闻

最新动态

清华大学新闻中心版权所有,清华大学新闻网编辑部维护,电子信箱: news@tsinghua.edu.cn
Copyright 2001-2020 news.tsinghua.edu.cn. All rights reserved.