Collection.stream() 的实现

2022-09-02 23:07:37

我已经在JDK 1.8上工作了几天,现在我遇到了一些类似于以下内容的代码:

List<Integer> list = Arrays.asList(1,2,3,4,5);
list.stream();

现在,对于一直在使用流()的人来说,它可能看起来简单而干净,但我找不到实现该方法的实际类。java.util.streamjava.util.Collection.stream()

当我说时,我有以下问题:list.stream()

  1. 我从哪里得到?java.util.stream.Stream
  2. 他们如何在不实际“干扰”现有馆藏的情况下实施它?(假设他们没有碰过它们)

我确实试图查看的文档,但无法找到它。java.util.AbstractCollectionjava.util.AbstractList


答案 1

Java 8 允许在接口中定义缺省方法

Collection<E>然后定义

default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
}

这就是他们添加它的方式。


答案 2

正如其他人所指出的,该方法在接口本身中作为默认方法实现,正如您在官方文档的方法签名中看到它一样:.stream()Collection

default Stream<E> stream()

流接口的实现方式是集合的实现细节。但是,为每个集合实现相同的繁重接口将需要大量的工作和重复,因此它们使用称为Spliterator的中间抽象。Stream

.stream() 上的这个 SO 线程可能也值得一读。


推荐