我使用Map來放置條件。 我的對象要:如何從Drools中的HashMap <String,Object>獲取BigDecimal 5.4.0
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
?
非常感謝!
如果你現在每個對象都有一個BigDecimal,爲什麼不只是施放它呢?另一種方法是詢問是否BigDecimal與Object.getClass() –
不是每個對象,只有1-3是BigDecimal.i只是想知道300B是正確還是不正確。 @LeoPflug – smallTong
因爲我不知道它,可能不是。如果你想檢查一個BigInteger是否更大,你必須使用它的方法。 –