如何从流口水地图中的地图中获取值
How to get a value from a map inside a map in drools
我有一个主地图对象,其中包含另一个地图。现在我需要在 drools 中获取它的价值吗?
我的代码看起来像
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);
我正在将此 'studentsMap' 对象插入流口水会话并触发规则。
How to compare marks values in drools (How to check condition if mark is greater than 90)?
我还没有尝试过,但也许可以做到
规则 "studentsMap"<br>
当<br>
条目:条目()来自$studentsMap.entrySet()<br>
marksMap : 来自 entry.getValue() 的 Map()
markEntry : 来自 marksMap.entrySet() 的 Entry()
标记:来自 markEntry.getValue()<br> 的 Number()
标记 > 90
然后<br>
System.out.println("mark greater than 90");<br>
结尾
我假设你的真实姓名是学生。
规则将如下所示:
rule "studentsMap"
when
Student($markMap : markMaap)
eval($markMap["Maths"] > 90)
then
System.out.println("mark greater than 90");
end
建议的解决方案对我不起作用。
您需要在 eval 中以不同方式调用 map。
rule "studentsMap"
when
Student($marks : markMap)
eval((int)$marks.get("Maths") > 90)
then
System.out.println("mark greater than 90");
end
还应该进行额外的转换。
链接: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
您还可以在调用 get 之前检查地图中是否存在键。
$student: Student($marks : markMap, $marks.containsKey("Maths"), $marks.get("Maths") > 90)
我有一个主地图对象,其中包含另一个地图。现在我需要在 drools 中获取它的价值吗? 我的代码看起来像
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);
我正在将此 'studentsMap' 对象插入流口水会话并触发规则。 How to compare marks values in drools (How to check condition if mark is greater than 90)?
我还没有尝试过,但也许可以做到
规则 "studentsMap"<br>
当<br>
条目:条目()来自$studentsMap.entrySet()<br>
marksMap : 来自 entry.getValue() 的 Map()
markEntry : 来自 marksMap.entrySet() 的 Entry()
标记:来自 markEntry.getValue()<br> 的 Number()
标记 > 90
然后<br>
System.out.println("mark greater than 90");<br>
结尾
我假设你的真实姓名是学生。 规则将如下所示:
rule "studentsMap"
when
Student($markMap : markMaap)
eval($markMap["Maths"] > 90)
then
System.out.println("mark greater than 90");
end
建议的解决方案对我不起作用。
您需要在 eval 中以不同方式调用 map。
rule "studentsMap"
when
Student($marks : markMap)
eval((int)$marks.get("Maths") > 90)
then
System.out.println("mark greater than 90");
end
还应该进行额外的转换。
链接: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
您还可以在调用 get 之前检查地图中是否存在键。
$student: Student($marks : markMap, $marks.containsKey("Maths"), $marks.get("Maths") > 90)