因此,假如我用一些隨機的過濾器上的流時,最簡單的方法就是直接輸入謂詞:使用謂詞或函數作爲Java流過濾器有什麼區別?
x.stream().filter(e -> e % 2 == 0)
除了我可以簡單地做一個參考,並預先定義謂詞:
Predicate<Integer> isEven = e -> e % 2 == 0;
...
x.stream().filter(isEven)
但我也用一個函數:
private static boolean isEven(Integer integer) {
return integer % 2 == 0;
}
...
x.stream().filter(MyClass::isEven)
據我所知,謂語當然是非常有限的,而功能可能有副作用等,但由於像Venkat Subramaniam這樣的人使用後者的解決方案,我真的想知道:這裏的主要區別是什麼?
我看到,如果沒有MR,我們只能定義關於其重用性的實際上有限的謂詞。所以這就產生了一個問題:更簡潔的寫作方式是什麼?使用MR,謂詞或實際陳述本身? – AdHominem
@AdHominem它取決於你的上下文。如果你真的不想複用你的謂詞,那麼只需堅持一個簡單的lambda表達式,但是如果你要繼續使用它,我建議在一些utils類中創建一個靜態的Predicate實例,而不必創建一個方法本身 –