本文介绍了Drools-提取嵌入到地图中的地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下是我的数据结构:
public class Premium{
private Map<String,Map<String,String>> valuesMap = new HashMap<String,Map<String,String>>();
public Map<String, Map<String, String>> getValuesMap() {
return valuesMap;
}
}
将出现在此‘valuesMap’中的示例值:
Map<String,String> m1= new HashMap<String,String>();
m1.put("death","100");
m1.put("income","50");
valuesMap.put("Male",m1);
valuesMap.put("Female",m2);
....
因此,我正在苦苦思索的是,如何为";man";提取‘ValuesMap’中嵌入的映射‘m1’?一旦我能做到这一点,我就可以考虑从‘m1’中提取值以下是我尝试过的方法,但似乎都不起作用...
rule "rule#7 testing me 001 "
when
// below line extracts 'valuesMap' from Premium object
$pr:Premium($masterMap:valuesMap)
// no error but does not go into 'then' and print SOP
//$map :Map(this["Male"]);
//$map :Map(this["Male"] != null);
// error : java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.Boolean
//$map : Map(this["Male"] ) from $masterMap
// prints Values Map and not the embedded map for both the below attempts
//$map : Map(this["Male"] != "") from $masterMap
//$map : Map(this["Male"] != null ) from $masterMap
// tried java way but getting error : Unable to resolve ObjectType '$masterMap.get' : [Rule name='rule#7 testing me 001 ']
//$map : $masterMap.get("Male");
// no error but did not fire then condition and print sop
//$map : Map($masterMap.get("Male"));
// error : Unable to resolve ObjectType '$masterMap.getGet' : [Rule name='rule#7 testing me 001 ']
//$map : $masterMap.getGet("Male");
//error : Unable to resolve ObjectType '$masterMap.get' : [Rule name='rule#7 testing me 001 ']
//$map : $masterMap.get("Male") from $masterMap
then
System.out.println("rule#7 map " + $map);
end
推荐答案
$pr: Premium( $masterMap: valuesMap )
Map( $male: this["Male"] ) from $masterMap
您真的应该尝试并避免在规则中使用地图。坦率地说,这种嵌套的地图结构总体上是糟糕的做法。在规则中,地图是非常糟糕的--很多年前(10多年前)它是S.O.P.通过地图成为规则,但后来我们发现它有多糟糕。;)
这篇关于Drools-提取嵌入到地图中的地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!