【问题标题】:Convert Guava predicate to Java 8 predicate将 Guava 谓词转换为 Java 8 谓词
【发布时间】: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


【解决方案1】:

Predicate 具有 andornegate 方法,但和或仅接受一个其他谓词。您仍然可以像这样使用这些方法:

PathSelectors.ant("/v1/*/s1/**")
     .or(PathSelectors.ant("/v1/*/s2/**")
    .or(PathSelectors.ant("/v/*/test/*/s3/*").and(PathSelectors.ant("/v1/*/test/*/s4/*").negate()))
    .or(PathSelectors.ant("/v1/*/test/*/s5/*/*")
    .or(PathSelectors.ant("/v1/*/test/*/s5/*/*");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多