假设我有这个清单:
id| type | var
1 | Type A | 4
2 | Type A | 4
3 | Type A | 4
4 | Type A | 4
5 | Type B | 3
6 | Type B | 3
7 | Type B | 3
我需要将其更改为:
id| type | var
1 | Type A | 7
2 | Type A | 7
3 | Type A | 7
4 | Type A | 7
5 | Type B | 7
6 | Type B | 7
7 | Type B | 7
(我正在添加第三栏)
when
$listA : ArrayList( ) from collect( Thing(type == 'A') )
$listB : ArrayList( ) from collect( Thing(type == 'B') )
erm...
then
um...
end
任何人都有任何好主意吗?
答案 0 :(得分:1)
在OP更新后编辑
declare SumOfVal
sum: int
end
rule "computeSum"
when
not SumOfVal()
Number( $iv: intValue )
from accumulate( Thing( $var: var )
init( int sum = 0; Set nums = new HashSet(); )
action( if( nums.add( $var ) ) sum += $var; )
result( sum ) )
then
insert( new SumOfVal( $iv ) );
end
rule "setSum"
when
SumOfVal( $sum: sum )
$t: Thing( var != $sum )
then
modify( $t ){ setVar( $sum ) }
end
事实SumOfVal
必须保留在工作内存中,以避免相反的过程一遍又一遍地重复,除非您在Thing中有一个字段可用于指示已执行此更新。