當變換處理(例如:變換List<People> people
到List<Integer> ages
,其中People
是包含一個屬性age
類),通常有2種方式(對我來說)這樣做的:我可以結合java8(流,拉姆達)和番石榴嗎?
使用java8:
people.stream().map(p -> p.getAge()).collect(toList())
;或用戶guava2:
Lists2.transform(people, People2AgeTransformer.INSTANCE);
其中People2AgeTransformer
是實現功能接口返回歲的變壓器。
最近,我accidentlly發現java8和番石榴可以合併,因此代碼可以是:
Lists2.transform(people, p->p.getAge());
這段代碼要求,並且運行正常,沒有任何錯誤,這讓我感到困惑。 方法Lists2.transform()
需要第二個參數傳遞給是接口com.google.common.base.Function
的實現,而java8拉姆達實際上是接口java.util.function.Function
的實現。(當然,它們都聲明瞭一個方法來B apply(A input)
變換到B.)
我不不明白爲什麼這會起作用,因爲它們是兩種不同包裝的不同界面。
Thx很多!猜猜我需要查看java8文檔。 – LaiyuXuan