如何在Drools 5.4.0 </string,object>中从HashMap <string,object>获取BigDecimal

时间:2014-04-01 05:39:20

标签: java drools

我使用Map来表达条件。 我的目标:

public class TestTO implements Serializable {

private String resultStr;

private List resultList;

private Map resultMap;

private Map parameterMap;
... ...
}

执行Drools规则:

public static Map getMapResult(TestTO rulesTo) throws Exception {
    StatelessKnowledgeSession kSession = getKnowledgeSession();
    AgendaEventListener ael = mock( AgendaEventListener.class );
    kSession.addEventListener(ael);
    kSession.execute(rulesTo);
    Map resultMap = rulesTo.getResultMap();
    if (resultMap != null && !resultMap.isEmpty())
        return resultMap;
    else throw new RuntimeException("EMPTY");
}

我的测试方法:

public void TestA() throws Exception{
Map<String, Object> test= new HashMap<String, Object>();
test.put("str1", "0");//string
test.put("str2", "SC");//string
test.put("dec1", new BigDecimal(372));//bigdecimal
TestTO m = new TestTo();
m.setParameterMap(test);
for(int i=0;i<22;i++){
    m.setResultMap(new HashMap<String, Object>());
    Map result=RuleTest.getMapResult(m);
  }
}

现在我对规则文件存在问题,如何从"dec1"获取parameterMap,因为此地图的值为Object ,if we get the value from this map by key. it's ok. but how to convert the value from对象to bigdecimal`?我尝试使用两种方式在drl文件中获取值:

1。to.getParameterMap()["gt"]>=300。但它有一些问题。

2。to.getParameterMap()["gt"]>=300B。也许没关系。

为什么第二个是好的(我认为)?。

我没有为drools方言指定默认值。所以我认为默认是“java”。

java方言是否支持300B

非常感谢!

1 个答案:

答案 0 :(得分:0)

假设带有键“dec1”的Entry始终是BigDecimal:

Entry(key == "dec1", $val : value) from myMap.entrySet()
$bigD : BigDecimal() from $val

我认为这是正确的...它为我编译,但我感觉很懒,所以我没有写过测试来证明它。