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

Drools中如何将A类Waiver列表转换为WaiverInfo列表存入B类实例

需求可行性结论

这个需求完全可以在Drools中实现,Drools原生支持集合遍历、对象属性映射、新实例创建和内存对象属性修改,完全覆盖你提到的转换场景。

实现核心思路

  • 提前将类A的实例、类B的实例统一插入到Drools工作内存中
  • 编写规则同时匹配工作内存中的A实例、B实例,以及A持有的waivers列表中的单个Waiver对象
  • 规则命中后,为每个Waiver对象创建对应WaiverInfo实例,复制code、name属性,追加到B的waiverList列表中即可

规则示例(.drl文件代码)

package com.example.rules
// 替换为实际的类所在包路径
import com.example.pojo.A
import com.example.pojo.B
import com.example.pojo.Waiver
import com.example.pojo.WaiverInfo
import java.util.ArrayList

rule "Waiver转WaiverInfo并存入B实例"
no-loop // 避免同一条数据重复触发规则
when
    $a: A($waiverList: waivers != null)
    $b: B($infoList: waiverList)
    // 遍历A的waivers列表取出单个Waiver对象
    $waiver: Waiver() from $waiverList
then
    // 初始化B的列表避免空指针
    if($infoList == null) {
        $b.setWaiverList(new ArrayList<>());
    }
    // 构建WaiverInfo对象复制属性
    WaiverInfo info = new WaiverInfo();
    info.setCode($waiver.getCode());
    info.setName($waiver.getName());
    // 存入B的列表
    $b.getWaiverList().add(info);
end

注意事项

  • 你提供的Java类属性都是默认访问权限,实际使用时需要补充对应属性的getter、setter方法,或将属性设置为public,保证Drools可以正常读写属性
  • 如果存在多规则触发的场景,可以额外加属性校验逻辑,避免重复插入相同的转换对象
  • 规则执行完成后,直接从工作内存中取出B实例即可拿到已经填充完成的waiverList

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:05