2014-04-01 59 views
0

我使用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

非常感謝!

+0

如果你現在每個對象都有一個BigDecimal,爲什麼不只是施放它呢?另一種方法是詢問是否BigDecimal與Object.getClass() –

+0

不是每個對象,只有1-3是BigDecimal.i只是想知道300B是正確還是不正確。 @LeoPflug – smallTong

+0

因爲我不知道它,可能不是。如果你想檢查一個BigInteger是否更大,你必須使用它的方法。 –

回答

0

假設Entry與關鍵「DEC1」始終是一個BigDecimal:

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

我認爲這是正確的...它編譯的我,但我感覺懶惰,所以我沒有寫一個測試來證明它。

+0

好的,謝謝,我會測試它。 – smallTong

+0

對不起,如何使用excel文件編寫它。 – smallTong

相關問題