gpt4 book ai didi

java - 流口水 - 因为累积不工作

转载 作者:行者123 更新时间:2023-12-02 13:22:53 28 4
gpt4 key购买 nike

我有这个类层次结构:

DomainParent{List<Details>, Boolean isCalculatedTypes(defaults false)}
Detail{List<SubDetail>}
SubDetail{TypeEnum}

还有这个枚举:

TypeEnum{Type1, Type2, Type3}

我想创建一个 drools 规则,用于检查所有子详细信息是否具有 Type1 或 Type2,以及另一个规则,用于在子详细信息列表包含任何不同的类型组合时触发。

到目前为止,我有这条规则,无论如何都会执行该规则,即使所有 SubDetails 都具有 Type3:

rule "calculate sub details with types 1 and 2"
when
$parent: DomainParent(!isCalculatedTypes())
$subDetails: List() from accumulate($detail: Detail() from $parent.getDetails();
collectList($detail.getSubDetails()))
forall(SubDetail(getTypeEnum() == TypeEnum.1() || getTypeEnum() == TypeEnum.2() from $subDetails)
then
System.out.println("begin calculating types");
//DO SOMETHING
$parent.setCalculatedTypes(true);
update($parent);
System.out.println("DONE calculating types");
end

最佳答案

重写您的规则以计算子详细信息对象的扁平列表。

rule "calculate sub details with types 1 and 2"
when
$dp: DomainParent( ! calculatedTypes, $details: details )
$sds: List( size > 0 )
from accumulate( $detail: Detail() from $details,
init( List list = new ArrayList(); )
action(list.addAll($detail.getSubDetails()); )
result( list ) )
not( SubDetail( type != Type.Type1 && != Type.Type2 ) from $sds )
then
System.out.println("begin calculating types");
end

您所犯的错误是相信添加 List<X> to a list 会添加该列表中的所有 X,但它不会:它只是将一个 List 添加到列表中。

请注意forall很棘手,并且不符合(我认为)你的想法。

关于java - 流口水 - 因为累积不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506963/

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