コンテンツの入力として取得しているデータをクリーンアップすることから始めます。質問とは少し矛盾しているように見えます。
次に行う必要があるのは、オブジェクトに関する問題のドメインを表すことです。例として、入力ファイルで定義された属性にマッピングする ContentObject という pojo を 1 つ作成します (並べ替えを行うには、Comparable を実装する整数または何かが必要になることに注意してください)。次に必要なのは、Maximum を保持する pojo (max と呼ばれる単一の属性を含む) です。
ステートレス ナレッジ セッションを作成し、オブジェクトを入力します。繰り返しますが、例として次のように言います。
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
// build the session input objects
ContentObject co1 = new ContentObject(0,"T1","id1", "Some Content 1");
ContentObject co2 = new ContentObject(1,"T2","id2", "Some Content 2");
ContentObject co3 = new ContentObject(3,"T3","id3", "Some Content 3");
Max max = new Max();
// populate a fact set
Set<Object> facts = new HashSet<Object>();
facts.add(co1); facts.add(co2); facts.add(co3); facts.add(max);
// run rules
ksession.execute(facts);
// display result
System.out.println(max.getMax());
別のリソースで、次のよだれを定義します。
package com.yourpackage
import com.yourpackage.ContentObject;
dialect "mvel"
rule "GetMax"
when
m1 : ContentObject ()
mx : Max( m1.size > max )
then
mx.max = m1.size;
update(mx);
end
Drools でそれほど明白ではないことは、ワーキング メモリでオブジェクトがどのように編成され、使用されるかということだと思います。drools のドキュメントで「クロス積」という用語を検索する価値があります。
また、この単純なアルゴリズムを drools に実装する前に、Java には同じことを行う 1 つのライナーがあることに注意してください (Comparable を実装していると仮定します - Collections.sort() を参照)!