Drools:如何比较两个列表中的属性的最佳实践

Drools: best practice in how to compare properties in two lists

我有两个对象列表

一个。设置:{字符串命令,字符串设置}

乙。建议:{字符串命令:字符串 recommendedSetting,字符串:风险}

使用 drools 我想检查是否有任何设置对象不符合建议,其中命令相同但设置 != recommendedSetting。

我使用 B 的全局列表工作,其中 A 对象作为事实添加并触发所有规则。

我也可以将两个列表作为事实输入并进行嵌套循环,但这似乎不是正确的方法。

import com.demo.drools.model.Setting;
import com.demo.drools.model.Recommendation;
import java.util.List;

global List<Recommendation> recommendations;
global List<Recommendation> suggestedRecommendations;

dialect  "mvel"

rule "Check Setting For Recommendation"
    when
        $recommendation : Recommendation() from recommendations;
        $setting: Setting(parameter == $recommendation.parameter && setting != $recommendation.setting)
    then
        suggestedRecommendations.add($recommendation);
end

我希望就这是否是最好的 practice/most 有效方法提供一些指导。

如果您可以避免将列表作为事实并简单地将它们的元素插入到您的会话中,那么我建议您离开 Drools 为您创建循环:

rule "Check Setting For Recommendation"
when
  $r: Recommendation();
  Setting(parameter == $r.parameter, setting != $r.setting)
then
  suggestedRecommendations.add($r);
end

希望对您有所帮助,