2017-03-29 84 views
1

我将compose()默认方法的使用与其等价的lambda表达式进行比较,找不到任何理由偏好前者。使用compose()而不是lambda表达式的任何理由?

可能的原因与代码表现或功能的编程风格,如指出here

然而,这两种方法的比较来解决这个问题How to do function composition?我只看到缺点,使用compose()代替lambda表达式。根据accepted answercompose()

1的方法:

Function<Person, String> toCountry = p -> p.getAddress().getCountry(); 

为什么我更喜欢第二个:

Function<Person, Address> personToAddress = Person::getAddress; 
Function<Address, String> addressToCountry = Address::getCountry; 
Function<Person, String> toCountry = addressToCountry.compose(personToAddress); 

与lambda表达式第二个做法?首先,它不那么冗长。其次,它不需要明确的辅助变量personToAddressaddressToCountry

那么,是否有任何理由使用compose()而不是明确使用lambda?

+4

第二个是合适的,当两个功能已经传递给你。即它们已经存在。 –

+2

在你简单的例子中,你知道如何从一个人获得地址以及如何从地址获取国家。但是如果你不知道如何获得地址呢?如果'Person'有'List

'而且你不知道你被请求了哪一个呢?然后,您可以从客户端调用请求映射器并撰写答案。 –

+1

只是挑剔,本地变量不是严格要求。您可以使用转换将方法引用链接到'Function'类型 –

回答

2

其中一个原因是如果您不在同一段代码中创建一个或甚至两个函数,而是从其他位置传入它们。然后你可以写一个lambda,在给定的函数上调用apply(),或者使用compose(),这可能会更清晰。