日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java 8 Streams:过滤和谓词否定

發(fā)布時間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8 Streams:过滤和谓词否定 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近,有關(guān)LJC 郵件列表的成員在流中.filter方法中使用謂詞否定的有趣討論,因此我認(rèn)為值得在博客文章中進(jìn)行總結(jié)。 討論的主題是使用.filter和否定謂詞的方法。

  • 這篇文章的代碼可以在我的github帳戶中找到 。

也許這就是您可能會想到的方式,但是這里有一些替代方法。

Stream.of(1, 2, 3, 4, 5, 6, 7).filter(((Predicate) c -> c % 2 == 0).negate())

答案1:編寫謂詞實用程序方法

您可以通過編寫執(zhí)行取反的實用程序方法來簡化此操作。

public static <R> Predicate<R> not(Predicate<R> predicate) {return predicate.negate(); }

這導(dǎo)致代碼更加整潔。

Stream.of(1, 2, 3, 4, 5, 6, 7).filter(not(c -> c % 2 == 0))
  • 在github上查看源代碼

答案2:使用標(biāo)識函數(shù)將方法引用轉(zhuǎn)換為謂詞

我們使用實用程序方法將方法引用轉(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最佳實踐

當(dāng)您使用方法引用并希望IDE創(chuàng)建該方法時, IntelliJ會將其創(chuàng)建為一個靜態(tài)方法,并將對象作為第一個參數(shù)。 使用not運(yùn)算符可以避免這種情況。

以下是一些有用的參考:

  • Java 8 Lambdas:面向大眾的函數(shù)式編程
  • Java SE 8最佳實踐
  • 亨氏的Lambda減少原理
  • LJC郵件列表
  • 方法引用在某些JDK版本中存在錯誤

翻譯自: https://www.javacodegeeks.com/2015/11/java-8-streams-filter-and-predicate-negation.html

總結(jié)

以上是生活随笔為你收集整理的Java 8 Streams:过滤和谓词否定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。