Java 8 与流中的过滤相反

Ant*_*sok 5 java java-8 java-stream

你好,我在 java 8 中该怎么做(我知道它已经在 java 11 中),与不过滤这个相反

filter(date -> date.isEqual(today) && repository.isDateExist(date))
Run Code Online (Sandbox Code Playgroud)

我可以这样写

filter(date -> !date.isEqual(today) || !repository.isDateExist(date))
Run Code Online (Sandbox Code Playgroud)

但它很难读

Era*_*ran 1

您可以使用Predicatesnegate()方法,但这需要将 lambda 表达式转换为该Predicate类型。否则编译器无法推断类型。

filter(((Predicate<Date>)(date -> date.isEqual(today) && repository.isDateExist(date))).negate())
Run Code Online (Sandbox Code Playgroud)

或者只是Predicate在对其取反之前将其分配给变量:

Predicate<Date> pred = date -> date.isEqual(today) && repository.isDateExist(date);
filter(pred.negate())
Run Code Online (Sandbox Code Playgroud)