我正在比较compose()
默认方法与其等效lambda表达式的使用,并且找不到任何更喜欢前者的理由。
可能原因与代码表达或函数式编程有关,如指向here
然而,比较解决问题How to do function composition?的两种方法,我发现使用compose()
而不是lambda表达式只会有缺点。
compose()
根据accepted answer的第一种方法:
Function<Person, Address> personToAddress = Person::getAddress;
Function<Address, String> addressToCountry = Address::getCountry;
Function<Person, String> toCountry = addressToCountry.compose(personToAddress);
使用lambda表达式的第二种方法:
Function<Person, String> toCountry = p -> p.getAddress().getCountry();
为什么我更喜欢第二个?首先,它不那么冗长。其次,它不需要显式辅助变量personToAddress
和addressToCountry
。
那么,有没有理由使用compose()
而不是显式使用lambda?
答案 0 :(得分:2)
一个原因是如果你不在同一段代码中创建一个或者两个函数,而是从其他地方传入它们。然后你可以写一个在给定函数上调用apply()
的lambda,或者使用compose()
,这可能更干净。