リファレンス collect

昨日のfromとあわせて利用します、文字通り集める(抽出)という宣言になります。例を見た方がわかりやすいので以下に例をば。

when
  ArrayList( $total : size > 0 ) from collect( Person( weight > 99 ) )
then
  results.add($total);

とルールを書いてJavaでは前回のPersonをListにつめてましたがPersonオブジェクトをブサイクな例ですがそのままInsertしてみます。

KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
	
// go !
Person p1 = new Person("内山くん", 130);
Person p2 = new Person("伊集院くん", 140);
Person p3 = new Person("松村くん", 130);
Person p4 = new Person("岡田くん", 99);
		
ksession.insert(p1);
ksession.insert(p2);
ksession.insert(p3);
ksession.insert(p4);

ksession.setGlobal("results",new ArrayList());	
ksession.fireAllRules();

これで実行するとresultsのListに3人分セットされるようになります。weightが99を超える人で、一人でもいれば(size > 0)、というのがルールでマッチングしたらglobal宣言したresultsに該当文のみセットされます。
大事なポイントはfromより前にあるArrayListですね。これはCollectionをimplしてればどのクラスでもおkです!