我是java新手并且流式传输所以我的问题是为什么这样做:
此方法位于我的Tree
类:
public Stream<Tree> flattened() {
return Stream.concat(
Stream.of(this),
children.stream().flatMap(Tree::flattened));
}
flatMap想要一个t为param的函数,而flattened方法根本没有输入参数
这里发生了什么?
答案 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是调用方法的第一个形式参数。 否则,没有目标参考