删除变量后是否可以缩写java函数?

删除变量后是否可以缩写java函数?,java,lambda,syntax,java-8,functional-interface,Java,Lambda,Syntax,Java 8,Functional Interface,在Java8的函数中,有一个快捷方式,即 () -> new ArrayList() 其内容如下: ArrayList::new 在使用streams时,我发现自己声明了许多类似于以下内容的函数: s.map(var -> var.getFoo()).flatMap(var -> var.parallelStream()).map(var -> var.getBar()) 如果前缀为var->var.,是否还有缩写?差不多 s.map(::getFoo()).fla

在Java8的函数中,有一个快捷方式,即

() -> new ArrayList()
其内容如下:

ArrayList::new
在使用streams时,我发现自己声明了许多类似于以下内容的函数:

s.map(var -> var.getFoo()).flatMap(var -> var.parallelStream()).map(var -> var.getBar())
如果前缀为
var->var.
,是否还有缩写?差不多

s.map(::getFoo()).flatMap(::parallelStream()).map(::getBar())

不太可能,唯一可能的事情是:使用方法引用的类名:

s.map(FooHolder::getFoo).flatMap(Whatever::parallelStream).map(OwnersOfBar::getBar)

显然,这是相当“更多”的打字。另一方面,关于所涉及的类型,它更为详细,告诉您。

方法引用的语法在中定义并编写为
Object::method
,未经讨论-您无法编写
::method
,因为该方法的起源仍然未知。变量
var
是一个对象的实例,对吗?因此:

s.map(MyObject::getFoo).flatMap(Collection::parallelStream).map(MyObject::getBar)
我个人的建议是选择可读的方式而不是简短的方式。缩短并不意味着可读性。出于某种原因,我不喜欢
Object::method
方法引用,而是使用
var->var.method()
。这是一个讨论和个人偏好的问题

但是,代码片段上面的语句是确定的。您必须遵循语法