【问题标题】:How does "Stream" in java8 work?java8中的“流”是如何工作的?
【发布时间】:2018-02-03 07:18:09
【问题描述】:

我是问原因还是原理。

我发现Java8中接口“Stream”的大部分方法都没有声明为“default”,所以它们没有方法体。例如:

boolean anyMatch(谓词谓词);

boolean allMatch(谓词谓词);

流图(函数映射器);

正如您在源文件 Stream.java 中看到的那样。

但是这些没有body的方法似乎可以在java程序中执行。

你知道为什么吗?

谢谢。

【问题讨论】:

  • 因为从stream() 得到的流是Stream 的具体实现,即ReferencePipeline 的某个子类。您不能实例化接口。这基本上是一个关于接口如何工作的问题......
  • 因为它或多或少是interface
  • 你可以看看任何stream() 方法的实现,几秒钟就可以完成。

标签: java functional-programming java-8 java-stream lambda-calculus


【解决方案1】:
abstract class ReferencePipeline<P_IN, P_OUT>
    extends AbstractPipeline<P_IN, P_OUT, Stream<P_OUT>>
    implements Stream<P_OUT>  ...

实现它们的是ReferencePipeline。例如:

@Override
public final boolean anyMatch(Predicate<? super P_OUT> predicate) {
    return evaluate(MatchOps.makeRef(predicate, MatchOps.MatchKind.ANY));
}

【讨论】:

  • 谢谢你,朋友!我在 jdk 源代码中找到了 ReferencePipeline。但奇怪的是,在 Oracle 网站的官方 java api 文档中没有找到。
  • @xuange 它没有记录在那里,因为它不是公开的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2012-09-02
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多