2017-03-29 30 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(),這可能會更清晰。