为什么我可以在没有stream()方法的类的对象上调用stream()方法?

时间:2015-05-20 08:04:35

标签: java collections syntax java-stream

我是大学新手Java程序员。我今天发现了一些破坏了我关于Java语法如何工作的概念。

public class testClass {

ArrayList <String> persons = new ArrayList <String> ();

public void run(){
    Stream <String> personstream = persons.stream();
}}

stream()课程中找不到方法ArrayList,但它可能看起来好像在那里。当我将鼠标移到Eclipse中的stream() - 方法上时,它表示它是收集的一部分,但我在其在线文档中的任何地方都找不到stream()方法。

如果stream()方法不属于我从中调用它的类,为什么要调用它?

4 个答案:

答案 0 :(得分:6)

您检查了正确的类和Java版本吗? Java 8的Collection(不是Collections)有stream() default methodwhich is inherited by ArrayList

/**
 * Returns a sequential {@code Stream} with this collection as its source.
 *
 * <p>This method should be overridden when the {@link #spliterator()}
 * method cannot return a spliterator that is {@code IMMUTABLE},
 * {@code CONCURRENT}, or <em>late-binding</em>. (See {@link #spliterator()}
 * for details.)
 *
 * @implSpec
 * The default implementation creates a sequential {@code Stream} from the
 * collection's {@code Spliterator}.
 *
 * @return a sequential {@code Stream} over the elements in this collection
 * @since 1.8
 */
default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
}

答案 1 :(得分:3)

ArrayList实现Collection接口。此接口的方法为stream()

答案 2 :(得分:1)

方法stream()是接口java.util.Collection中定义的默认方法。查看java.util.Collection的来源。

它使用splititerator()上的方法java.util.ArrayList来实现。

答案 3 :(得分:1)

这是有效的Java 8代码:

List<String> persons = new ArrayList<>();
Stream<String> stream = persons.stream();

List<T>.stream()可用。