gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:37:02 24 4
gpt4 key购买 nike

我在工作内存中有一个 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>

最佳答案

您应该始终尝试编写规则,以便订单不计算在内。但是,如果您真的需要按特定顺序触发规则,或者在这种情况下,请按特定顺序从列表中获取事实。确保在更新到较新版本的引擎时,规则引擎内部的任何更改都不会破坏您的规则。

即使它以相反的方式进行迭代,您也不能信任“来自”。

此解决方案存在一个问题。如果更新了 ImportItem 并且需要再次遍历输入,则需要收回与其相关的 MyIterator。

declare MyIterator
index:int
lastIndex:int
importItem:ImportItem
end

rule "Insert ImportItem iterator"
when
item : ImportItem()
not MyIterator( importItem == item )
then
MyIterator myIterator = new MyIterator();
myIterator.setImportItem( item );
myIterator.setIndex( 0 );
myIterator.setLastIndex( item.getInput().size() );
insert( myIterator );
end

rule "My Rule"
when
myIterator :MyIterator( index < lastIndex )
item : ImportItem( this == myIterator.importItem,
ignore == false )
map : Map() from item.getInput().get( myIterator.getIndex() )
then
System.out.println(map);

myIterator.setIndex( myIterator.getIndex() + 1 );
update( myIterator );
end

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com