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

Drools规则LHS条件涉及空列表时如何正常触发规则

问题根因

你当前的checkfacts规则无法在列表为空时触发,是因为LHS中的$a : A() from $b.As语句要求必须从$b.As中匹配到至少1个A类型的实例,当列表为空时该条件不成立,整段LHS匹配失败,规则自然不会触发。

解决方案

根据你的业务需求可选以下两种修改方式:

场景1:处理逻辑不需要用到As中存储的A实例,仅需处理B对象

直接删除LHS中匹配A的行即可,只要B对象插入工作内存,规则就会触发,和As是否为空完全无关:

rule "checkfacts"
when
    $b : B();
then
    // 直接处理$b即可
end

场景2:处理逻辑需要用到As中的A实例(空列表时也要走对应的分支逻辑)

使用collect函数收集所有A实例,无论列表是否为空collect都会返回对应的ArrayList对象,可满足匹配条件:

rule "checkfacts"
when
    $b : B();
    $aList : ArrayList() from collect(A() from $b.As);
then
    // 可先判断$aList是否为空再走对应逻辑
    if($aList.isEmpty()){
        // 空列表的处理逻辑
    }else{
        // 非空时遍历处理A实例
        for(Object a : $aList){
            A actualA = (A)a;
            // 处理A的逻辑
        }
    }
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:27:02