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

如何让Groovy的findAll方法按谓词优先级匹配并停止后续查找

Groovy规则匹配逻辑调整方案

直接按优先级分步处理即可,先筛选第一个谓词的结果,若不为空则返回;否则再筛选符合第二个谓词但排除第三个的结果:

// 先获取精准匹配的规则
def exactMatches = rules.findAll { 
    it.controller == controllerName && it.actions.contains(actionName) 
}

// 如果有精准匹配,直接返回;否则返回控制器匹配且动作是*但排除全局通配的规则
ArrayList rule = exactMatches ?: rules.findAll { 
    (it.controller == controllerName && it.actions.contains("*")) && 
    !(it.controller == "*" && it.actions.contains("*")) 
}

逻辑说明

  • 第一步先筛选精准匹配的元素:控制器完全匹配且包含指定动作的规则
  • 若精准匹配结果不为空,直接使用该结果,不再处理后续逻辑
  • 若精准匹配无结果,再筛选**控制器匹配且动作为通配符*的规则,同时排除全局通配(控制器和动作都是*)**的规则

这样就完全符合要求的优先级逻辑,避免了原代码中多个||导致的优先级混淆问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:48:38