流口水和地图

时间:2012-02-01 10:02:29

标签: hashmap drools

我是这个框架的初学者,我正在尝试使用地图而不是Java类。

我的例子如下:

主要方法:

Map<String, Float> mapa = new HashMap<String, Float>();
mapa.put("Height", (float)1.73);
mapa.put("Weight", (float)79.0);
mapa.put("BMI", mapa.get("Weight") /
                (mapa.get("Height") * mapa.get("Height")));
ksession.insert(mapa);

rule.drl:

rule "Low BMI"
    when
        $map : (Map(values("BMI")) < 18.0)
    then 
        System.out.println("You have a low BMI");
end

我想比较规则前置条件中BMI的值,如果这个条件为真,那么我想在下面显示这条消息。

有什么不对?

2 个答案:

答案 0 :(得分:17)

你应该写一些类似的东西:

when
    $map: Map(this["BMI"] < 18)
then

它应该工作:)

答案 1 :(得分:0)

一般来说,请参阅 Drools doc 7.8.3.3.10. List and Map access 部分...

FWIW:尽管在该参考文献中没有提到下面的更简化的语法,但我发现 [至少对于 Drools 6.2.0] 是有效的(至少对于 { {1}},在 Map<String, Boolean> 中):

ObjectUnderSpecification

我已经测试过它可以工作。显然,键所在的 Map 的名称甚至不需要被引用......我想只要 rule "you rule name" when ObjectUnderSpecification(mapKey == true) then // RHS code end 内的 some Map 有键,那就是得到的进一步评价。 如果您发现任何参考文献反映了我在上面的轶事发现,请在任何参考文献中进行评论或编辑。

(我不知道这是否可以与嵌套地图类似地工作)。

我想这种类型的语法也可以与这里问题中的 ObjectUnderSpecification 一起使用,类似这样(但我还没有测试过这个):

Map<String, Float>