You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Guava Predicate转换为Java 8 Predicate并使用or、and、not方法

Guava Predicate 转 Java 标准库 Predicate 实现方案

核心差异说明

Java 自带的java.util.function.Predicate和Guava的Predicate核心使用区别如下:

  • Guava的Predicates.or()、Predicates.and()支持传入多个Predicate做批量逻辑判断,Java标准库的Predicate仅提供二元实例方法or()、and(),多个条件需要链式调用拼接
  • Guava的Predicates.not()对应Java 11+的静态方法Predicate.not(),Java 8环境可直接调用实例方法negate()实现取反
  • 如果你的PathSelectors.ant()方法原本返回的是Guava的com.google.common.base.Predicate,通过方法引用guavaPredicate::apply即可转成Java标准库的Predicate类型

转换后代码示例

Java 11及以上版本

import java.util.function.Predicate;

class Test {

    private Predicate<String> getPath() {
        return PathSelectors.ant("/v1/*/s1/**")
                .or(PathSelectors.ant("/v1/*/s2/**"))
                .or(PathSelectors.ant("/v/*/test/*/s3/*"))
                .or(Predicate.not(PathSelectors.ant("/v1/*/test/*/s4/*")))
                .or(PathSelectors.ant("/v1/*/test/*/s5/*/*"));
    }
    
}

注意:你原代码中重复写了两次/v1/*/test/*/s5/*/*的规则,直接删除重复项即可,不影响逻辑;原代码中仅传单个参数的and()调用等价于直接使用该Predicate,如果你实际需要同时满足多个条件,按A.and(B).and(C)格式链式拼接即可。

Java 8版本

仅需修改取反逻辑即可:

.or(PathSelectors.ant("/v1/*/test/*/s4/*").negate())

多条件and示例

如果需要实现多个Predicate同时满足的逻辑,参考如下写法:

// 同时满足匹配s3、不匹配s4两个条件
Predicate<String> s3AndNotS4 = PathSelectors.ant("/v/*/test/*/s3/*")
        .and(Predicate.not(PathSelectors.ant("/v1/*/test/*/s4/*")));

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:27:04