当前位置: 技术文章>> 100道Java面试题之-Java 8中引入的Stream API是什么?它提供了哪些主要操作?

文章标题:100道Java面试题之-Java 8中引入的Stream API是什么?它提供了哪些主要操作?
  • 文章分类: 后端
  • 6796 阅读

Java 8中引入的Stream API是什么?

Java 8中引入的Stream API是一种新的抽象,旨在提高Java程序员在处理集合(Collection)时的生产力。Stream API通过提供一种高级的、声明式编程方式来处理数据,允许对数据进行复杂的查询和操作,而不需要编写冗长且易出错的代码。Stream是数据的流,它可以来自于集合、数组或其他任何数据源。Stream不存储数据,它只是按需处理数据,相当于在数据源和操作后的新流之间搭起一个数据传输管道,在这个传输管道中通过流计算进行一系列流水线式的中间操作,产生一个新的流。

Stream API提供了哪些主要操作?

Stream API的操作主要可以分为中间操作(Intermediate Operations)和终端操作(Terminal Operations)两大类。

  1. 中间操作

    • 中间操作会返回一个新的Stream对象,允许多个中间操作连接起来形成一个查询。常见的中间操作包括:
      • filter(Predicate<? super T> predicate):过滤元素,只保留满足给定条件的元素。
      • map(Function<? super T, ? extends R> mapper):映射元素,将每个元素转换成另一种形式或类型。
      • sorted(Comparator<? super T> comparator):排序元素,根据提供的Comparator进行排序。
      • distinct():去除重复元素,通过流所生成元素的hashCode和equals去除重复元素。
      • limit(long maxSize):截断流,使其元素不超过给定数量。
      • skip(long n):跳过指定数量的元素。
      • flatMap(Function<? super T, ? extends Stream<? extends R>> mapper):将流中的每个元素转换成Stream,然后将所有生成的Stream连接成一个流。
  2. 终端操作

    • 终端操作会生成一个结果或副作用,并在执行后使Stream不再可用。常见的终端操作包括:
      • forEach(Consumer<? super T> action):对流中的每个元素执行给定操作。
      • collect(Collector<? super T, A, R> collector):将流中的元素收集到给定类型的集合中。
      • reduce(BinaryOperator<T> accumulator):通过归约操作(如求和、求最大值等)将流中的所有元素反复结合起来,得到一个值。
      • count():计算流中的元素数量。
      • anyMatch(Predicate<? super T> predicate):检查流中是否存在至少一个元素满足给定的条件。
      • allMatch(Predicate<? super T> predicate):检查流中是否所有元素都满足给定的条件。
      • noneMatch(Predicate<? super T> predicate):检查流中是否没有任何元素满足给定的条件。
      • findFirst():返回流中的第一个元素(如果存在)。
      • findAny():返回流中的任意元素(可能用于并行流中的优化)。

Stream API的设计使得对集合的操作更加简洁、易读和可维护,同时支持并行处理,能够显著提高处理大量数据的效率。

推荐文章