流接口方法在java中是如何工作的?

流接口方法在java中是如何工作的?,java,intellij-idea,lambda,java-8,java-stream,Java,Intellij Idea,Lambda,Java 8,Java Stream,最近我学习了Java 8的特性,所以我从一个lambda表达式开始,然后我遇到了Java流API,现在我正试图了解流API中的方法,它们是如何工作的 我对lambda表达式的理解是,如果我们想将lambda表达式传递给该方法,那么我们需要使用单个未实现的方法创建一个接口,Java 8接口可以具有匹配lambda表达式签名的默认实现。然后,lambda表达式传递到的方法可以通过调用接口方法来执行lambda表达式。所以我可以说lambda表达式可以作为接口方法的实现 但是当我看到流API时,它有一

最近我学习了Java 8的特性,所以我从一个lambda表达式开始,然后我遇到了Java流API,现在我正试图了解流API中的方法,它们是如何工作的

我对lambda表达式的理解是,如果我们想将lambda表达式传递给该方法,那么我们需要使用单个未实现的方法创建一个接口,Java 8接口可以具有匹配lambda表达式签名的默认实现。然后,lambda表达式传递到的方法可以通过调用接口方法来执行lambda表达式。所以我可以说lambda表达式可以作为接口方法的实现

但是当我看到流API时,它有一些方法可以改变流,例如下面的代码只是通过过滤小于5的整数来打印整数

import java.util.Arrays;
import java.util.List;


public class StreamDemo {
   static List<Integer> list= Arrays.asList(new Integer(1), new Integer(2), new Integer(3), new Integer(4), new Integer(5), new Integer(6));
    public static void main(String[] ar) {
        list.parallelStream()
                .filter( x-> x<5)
                .forEach(System.out::print);
    }
}
但我不理解过滤器是如何工作的,因为它没有实现,我试图从Intellij中看到实现,它将我带到流接口,在流接口中,过滤器是采用参数谓词引用的未实现方法,但没有谓词方法boolean testT的方法调用;那么,Java如何评估结果呢?同样,还有一种方法distinct,它没有实现,但仍然能给出准确的结果

提前感谢。

流只是一个界面,就像列表一样。 在运行时,Java选择执行该任务的实现。 如果您想知道filter方法是如何实现的,您可以在java.util.stream.ReferencePipelinefilter中找到一个示例

我希望这能回答您的问题。

流只是一个界面,就像列表一样。 在运行时,Java选择执行该任务的实现。 如果您想知道filter方法是如何实现的,您可以在java.util.stream.ReferencePipelinefilter中找到一个示例


我希望这能回答您的问题。

过滤器确实有一个实现,在本例中,它由parallelStream返回的流实例提供。通过单击定义旁边空白处的绿色下箭头,您可以找到接口方法的所有实现。感谢快速提示,但我无法导航到distinct方法definition@AkshayNaik您不需要知道哪个类实现了这个方法,以及它是如何实现的。您需要知道的是,不管流的具体实现是什么,它都有一个独特的方法,该方法在流接口的javadoc中记录在案。过滤器确实有一个实现,在本例中,它是由parallelStream返回的流实例提供的。通过单击定义旁边空白处的绿色下箭头,您可以找到接口方法的所有实现。感谢快速提示,但我无法导航到distinct方法definition@AkshayNaik您不需要知道哪个类实现了这个方法,以及它是如何实现的。您需要知道的是,不管流的具体实现是什么,它都有一个独特的方法,可以在流接口的javadoc中使用。1.由于流是由ReferencePipeline 2实现的,因此如何在不向下投射的情况下调用filter方法。ReferencePipeline没有distinct MethodOk的实现,现在明白了,stream方法给出了ReferencePipeline的对象,因为这些方法是流接口的,所以不需要向下转换对象。感谢@jdebonThanks的准确回答,但这仍然给我留下了两个问题。1.由于流是由ReferencePipeline 2实现的,因此如何在不向下投射的情况下调用filter方法。ReferencePipeline没有distinct MethodOk的实现,现在明白了,stream方法给出了ReferencePipeline的对象,因为这些方法是流接口的,所以不需要向下转换对象。谢谢@jdebon