我使用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
?
非常感谢!
答案 0 :(得分:0)
假设带有键“dec1”的Entry
始终是BigDecimal:
Entry(key == "dec1", $val : value) from myMap.entrySet()
$bigD : BigDecimal() from $val
我认为这是正确的...它为我编译,但我感觉很懒,所以我没有写过测试来证明它。