java stream - 带方法引用的flatmap

时间:2017-03-07 22:39:33

标签: java java-8 java-stream

我是java新手并且流式传输所以我的问题是为什么这样做:

此方法位于我的Tree类:

public Stream<Tree> flattened() {
    return Stream.concat(
            Stream.of(this),
            children.stream().flatMap(Tree::flattened));
}

flatMap想要一个t为param的函数,而flattened方法根本没有输入参数

这里发生了什么?

1 个答案:

答案 0 :(得分:6)

函数调用中确实存在隐藏参数。由于flattened是一种非静态方法,因此函数中有一个隐含参数,称为this

基本上,您在流中的每个对象上调用flattened,其中所述元素是您的参数。

编辑(澄清):Tree::flattened可能意味着两件事之一。这可能意味着:

tree -> Tree.flattened(tree) //flattened is a static method, which yours is not

或者它也可能意味着:

tree -> tree.flattened() //flattened is an instance method, as in your case

除此之外,它还可能意味着:

tree -> this.flattened(tree) //also doesn't apply to your case

来自JLS

  

如果编译时声明是实例方法,那么目标   reference是调用方法的第一个形式参数。   否则,没有目标参考