给定一些Java 8方法函数:
class Foo { Bar getBar() {} }
class Bar { Baz getBaz() {} }
两个访问器组合起来的样子如下:
Function<Foo, Bar> getBarFromFoo = Foo::getBar;
Function<Bar, Baz> getBazFromBar = Bar::getBaz;
Function<Foo, Baz> getBazFromFoo = getBarFromFoo.andThen(getBazFromBar);
有更简洁的方法吗?这似乎有效。
((Function<Foo, Bar>) Foo::getBar).andThen(Bar::getBaz)
但它相当丑陋。外部括号由于优先级原因是有意义的,但为什么需要强制转换呢?
(Foo::getBar::getBaz
会很好,但不幸的是...)
foo -> foo.getBar()::getBaz
?看起来你把它搞复杂了。我有什么地方理解错了吗? - Dioxinfoo -> foo.getBar().getBaz()
?否则的话,这样写就没有意义了。 - Andrew Tobilkoa->b
、b->c
),并用简单的操作如Function
的compose
和andThen
来组合它们,而不是在编译时建立所有可能的情况。 - Andrew Tobilkofoo -> bar -> bar::getBaz
- Dioxinfoo -> bar -> bar::getBaz
来实现一个映射序列(在这里,获取一个Baz
作为输出)。它可能会返回类似于Function<Foo, Function<Bar, Function<Bar, Baz>>>
的东西,这是没有意义的。 - Andrew Tobilko