在Java 8的功能中,有一个快捷方式,即
() -> new ArrayList()
其内容为:
ArrayList::new
在使用流时,我发现自己声明了许多这样的功能:
s.map(var -> var.getFoo()).flatMap(var -> var.parallelStream()).map(var -> var.getBar())
如果前缀为var -> var.
,是否还有一个缩写?像
s.map(::getFoo()).flatMap(::parallelStream()).map(::getBar())
答案 0 :(得分:2)
不是真的,唯一可能的是:对方法引用使用类名:
s.map(FooHolder::getFoo).flatMap(Whatever::parallelStream).map(OwnersOfBar::getBar)
显然,这是“更多”的输入。另一方面,它告诉您有关所涉及类型的详细信息。
答案 1 :(得分:1)
方法引用的语法在JLS-15处定义,并写为Object::method
,无需讨论-您不能写::method
,因为方法的来源仍然未知。变量var
是对象的实例,对吗?因此:
s.map(MyObject::getFoo).flatMap(Collection::parallelStream).map(MyObject::getBar)
我个人的建议是选择简短易读的方式。缩短并不意味着可读性。由于某些原因,我不喜欢Object::method
方法参考,而是使用var -> var.method()
。这是讨论和个人喜好的问题。
但是,代码段上方的语句是确定的。您必须遵循语法。