java8 streams_Java 8 Streams:过滤和谓词否定
java8 streams
最近,有關(guān)LJC 郵件列表的成員在流中.filter方法中使用謂詞否定的有趣討論,因此我認(rèn)為值得在博客文章中進(jìn)行總結(jié)。 討論是關(guān)于使用.filter和否定謂詞的方法。
- 這篇文章的代碼可以在我的github帳戶中找到 。
也許這就是您可能會想到的方式,但是這里有一些替代方法。
Stream.of(1, 2, 3, 4, 5, 6, 7).filter(((Predicate) c -> c % 2 == 0).negate())答案1:編寫謂詞實(shí)用程序方法
您可以通過編寫執(zhí)行取反的實(shí)用程序方法來簡化此操作。
public static <R> Predicate<R> not(Predicate<R> predicate) {return predicate.negate(); }這樣可以使代碼更加整潔。
Stream.of(1, 2, 3, 4, 5, 6, 7).filter(not(c -> c % 2 == 0))- 在github上查看源代碼
答案2:使用標(biāo)識函數(shù)將方法引用轉(zhuǎn)換為謂詞
我們使用實(shí)用程序方法將方法引用轉(zhuǎn)換為謂詞。
public static <T> Predicate<T> predicate(Predicate<T> predicate) {return predicate; }盡管代碼不是那么整潔。
Stream.of("Cat", "", "Dog").filter(predicate(String::isEmpty).negate())- 參考資料: 亨氏的Lambda減少原理
答案3:使用not(!)運(yùn)算符
使用熟悉的not運(yùn)算符。
Stream.of(1, 2, 3, 4, 5, 6, 7).filter((c -> c % 2 != 0))Stream.of("Cat", "", "Dog").filter(str -> !str.isEmpty())該代碼更簡單,并且立即熟悉。
有人爭辯說,方法引用在重構(gòu)時通常比簡單的lambda難于閱讀,并且比較棘手,并且流鏈中混合lambda和方法引用會使讀者感到困惑。 參考: Java SE 8最佳實(shí)踐
當(dāng)您使用方法引用并希望IDE創(chuàng)建該方法時, IntelliJ會將其創(chuàng)建為靜態(tài)方法,并將對象作為第一個參數(shù)。 使用not運(yùn)算符可以避免這種情況。
以下是一些有用的參考:
- Java 8 Lambdas:面向大眾的函數(shù)式編程
- Java SE 8最佳實(shí)踐
- 亨氏的Lambda減少原理
- LJC郵件列表
- 方法引用在某些JDK版本中存在錯誤
翻譯自: https://www.javacodegeeks.com/2015/11/java-8-streams-filter-and-predicate-negation.html
java8 streams
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java8 streams_Java 8 Streams:过滤和谓词否定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javafx窗体程序_JavaFX真实世
- 下一篇: 电脑触屏手写软件(电脑触屏手写软件哪个好