【发布时间】:2021-10-21 23:12:00
【问题描述】:
我正在尝试将下面的代码从 Gauva 谓词转换为 java 谓词,但不知道如何应用 or,而不是 java 谓词的函数到下面的方法
import java.util.function.Predicate;
class Test {
private Predicate<String> getPath() {
return or(
PathSelectors.ant("/v1/*/s1/**"),
PathSelectors.ant("/v1/*/s2/**"),
and(PathSelectors.ant("/v/*/test/*/s3/*")),
not(PathSelectors.ant("/v1/*/test/*/s4/*"))),
PathSelectors.ant("/v1/*/test/*/s5/*/*"),
PathSelectors.ant("/v1/*/test/*/s5/*/*"),
);
}
}
【问题讨论】:
-
你的括号放错了位置,
/v1/*/test/*/s5/*/*出现了两次,否定/v1/*/test/*/s4/*是没有意义的,因为任何指定的模式都不会包含该模式。这就像说“A 但不是 B”。通常,使用/v1/*/s[12]/**比将/v1/*/s1/**和/v1/*/s2/**与or结合使用更简单、更有效。
标签: java java-8 guava predicate