北京金创网站建设,怎么在网上卖自己的产品,网站设置仅某浏览器,全国网站打开速度最近#xff0c;有关LJC 邮件列表的成员在流中.filter方法中使用谓词否定的有趣讨论#xff0c;因此我认为值得在博客文章中进行总结。 讨论的主题是使用.filter和否定谓词的方法。 这篇文章的代码可以在我的github帐户中找到 。 也许这就是您可能会想到的方式#xff0c;… 最近有关LJC 邮件列表的成员在流中.filter方法中使用谓词否定的有趣讨论因此我认为值得在博客文章中进行总结。 讨论的主题是使用.filter和否定谓词的方法。 这篇文章的代码可以在我的github帐户中找到 。 也许这就是您可能会想到的方式但是这里有一些替代方法。 Stream.of(1, 2, 3, 4, 5, 6, 7).filter(((Predicate) c - c % 2 0).negate())答案1编写谓词实用程序方法 您可以通过编写执行取反的实用程序方法来简化此操作。 public static R PredicateR not(PredicateR predicate) {return predicate.negate();
} 这导致代码更加整洁。 Stream.of(1, 2, 3, 4, 5, 6, 7).filter(not(c - c % 2 0)) 在github上查看源代码 答案2使用标识函数将方法引用转换为谓词 我们使用实用程序方法将方法引用转换为谓词。 public static T PredicateT predicate(PredicateT predicate) {return predicate;
} 尽管代码不是那么整洁。 Stream.of(Cat, , Dog).filter(predicate(String::isEmpty).negate()) 参考资料 亨氏的Lambda减少原理 答案3使用not运算符 使用熟悉的not运算符。 Stream.of(1, 2, 3, 4, 5, 6, 7).filter((c - c % 2 ! 0))Stream.of(Cat, , Dog).filter(str - !str.isEmpty()) 该代码非常简单并且立即熟悉。 有人争辩说方法引用在重构时通常比简单的lambda难于阅读并且比较棘手并且流链中混合lambda和方法引用会使读者感到困惑。 参考 Java SE 8最佳实践 当您使用方法引用并希望IDE创建该方法时 IntelliJ会将其创建为一个静态方法并将对象作为第一个参数。 使用not运算符可以避免这种情况。 以下是一些有用的参考 Java 8 Lambdas面向大众的函数式编程 Java SE 8最佳实践 亨氏的Lambda减少原理 LJC邮件列表 方法引用在某些JDK版本中存在错误 翻译自: https://www.javacodegeeks.com/2015/11/java-8-streams-filter-and-predicate-negation.html