jboss - 为什么 'from'关键字会向后迭代?

标签 jboss drools

我的工作内存中有一个 ArrayList,我正在 when 子句中使用“from”语句对其进行迭代。然而,该规则是向后迭代数组。有没有办法控制这种行为?

列表创建:

List<Map<String,String>> list = new ArrayList<Map<String,String>>();
Map<String,String> m1 = ...
Map<String,String> m2 = ...
list.add(m1);
list.add(m2);
ImportItem item = new ImportItem(list);  //model object. Constructor arg returned by getInput()
StatelessKnowledgeSession session = knowledgeBase.newStatelessKnowledgeSession();
session.insert(item);
session.fireAllRules();

流口水规则:

rule "My Rule"
dialect "java"
when
    item : ImportItem(ignore == false)  //model object that holds the input
    map  : Map() from item.getInput()  // == the ArrayList from above
then
    System.out.println(map);
end

产品

<output of m2>
<output of m1>

最佳答案

迭代不是向后的,正如您在 session 中附加审核日志时所看到的那样。默认情况下,规则的执行遵循 LIFO 顺序(如果您不使用任何其他冲突解决策略)。

我对您的建议是不要尝试将对象封装在数据结构中。如果您正在读取文件的行并且需要按顺序处理这些行,只需使用一个类来表示该行并将这些行直接插入到 session 中即可。为了保证执行顺序,可以使用行号作为显着性参数。

例如:

rule "Process lines in order"
   // salience executes from higher number to lowest number, so using the 
   // negative value you will executem them from the first to the last
   salience (- $lineNumber )
when
   $line : Line( $lineNumber : lineNumber )
then
   // do something with $line
end

显然,相同的技巧可以用于您采用的“from”方法,但引擎在工作内存中匹配事实比迭代对象集合要高效得多。

希望有帮助。 埃德森

关于jboss - 为什么 'from'关键字会向后迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752137/

相关文章:

Java进程内存持续上升

drools - 找不到KieModule : org.默认:artifact:1. 0.0-快照

drools - “Drools Camel 服务器”与 'KIE-WB Execution Server'

java - 为什么 Jboss 流口水规则在计时之前就过期了

java - JEE6 上的独立和域有什么区别?

mod-rewrite - 如何在 JBoss 服务器上重写 URL?

java - 在没有数据源的情况下在 Wildfly 中启动 .war

drools - 规则编译错误 Drools 操作列,无法解析变量

performance - 如何提高流口水的性能?

jboss - "WFLYCTL0412: Required services that are not installed:"=> ["jboss.jdbc-driver.mysql"]