Jim Laskey在OpenJDK core-libs-dev邮件列表上最近的消息“ RFR:CSR – JDK-8203428 Predicate :: not ”指出了JDK Bug JDK-8203428 [“ Predicate :: not”]。 JDK-8203428的“摘要”指出:“引入新的静态方法Predicate :: not,这将使开发人员可以轻而易举地否定谓词lambda。” 当前已分配给JDK 11 。
JDK-8203428的“问题”部分提供了对Predicate::not
解决的问题的简要描述:
谓词否定的要求经常发生,因为谓词被定义为对正选择有反作用。 isNull,isEmpty,isBlank。
当前,如果不先包装在谓词对象中,就没有简单的方法来否定谓词lambda 。
有一个非常有说明性的示例,说明了如何在JDK-8203428编写中使用它。 JDK-8203428的“问题”部分提供了演示当今如何执行“谓词否定”的代码,而“解决方案”部分提供了演示如何使用建议的静态方法Predicate::not
实现相同功能的代码。
在此邮件列表线程中还有一些其他有趣的消息。 该线程中的Brian Goetz消息指出:“我们确实发现[功能接口]上的默认方法与[功能接口]的子类型结合在一起会造成麻烦。 但是静态方法很好。” 线程中的RémiForax消息指出:“ stackoverflow已经确定 Predicate.not是正确的方法 。” 该线程中的Sundararajan Athijegannathan消息指出“ not(String::isEmpty)
读取几乎就像!str.isEmpty()
。
将静态函数not(Predicate<T>)
到Predicate是一件小事,但是应该提高许多Java代码行的流畅性。
翻译自: https://www.javacodegeeks.com/2018/05/predicatenot-coming-to-java.html