我有一个 Main 地图对象,其中包含另一张地图。现在我需要在流口水中从中获取价值吗?我的代码看起来像
HashMap<String,Object> studentsMap = new HashMap<String,Object>();
HashMap<String,int> marksMap = new HashMap<String,int>();
marksMap.put("Maths",98);
marksMap.put("Chemistry",96);
studentsMap.put("JohnDoe", marksMap);
Run Code Online (Sandbox Code Playgroud)
我将这个 'studentsMap' 对象插入到 drools 会话并触发规则。如何比较流口水中的标记值(如果标记大于 90,如何检查条件)?
提议的解决方案对我不起作用。
您需要在 eval 中以不同的方式调用 map。
rule "studentsMap"
when
Student($marks : markMap)
eval((int)$marks.get("Maths") > 90)
then
System.out.println("mark greater than 90");
end
Run Code Online (Sandbox Code Playgroud)
还应该进行额外的铸造。
链接:http : //lists.jboss.org/pipermail/rules-users/2007-November/003921.html
UPD:找到了更传统的方法来做到这一点
rule "studentsMap"
when
$student: Student($marks : markMap, $marks.get("Maths") > 90)
then
System.out.println("mark greater than 90");
end
Run Code Online (Sandbox Code Playgroud)
您还可以在调用 get 之前检查地图中是否存在密钥。
$student: Student($marks : markMap, $marks.containsKey("Maths"), $marks.get("Maths") > 90)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4064 次 |
| 最近记录: |