1

条件のあるテーブルがあります

サイズ| タイプ| id | コンテンツ
1| 2 | 1 | 「ハイ」
ヌル| null | null | 「デフォルトコンテンツ」
1| null | null | 「サイズ1のコンテンツ」

テーブル内のすべての行をオブジェクトのリストに入れます。

class A{  
  private String size="";  
  private String type="";  
  private String id="";  
 private String content = "";  
}  

要件は、最大条件に一致する行に対応するコンテンツを表示することです。それ以外の場合は、デフォルトのメッセージを表示します('null、null、null'行に対応)。

どうすればこれをよだれで行うことができますか?私は完全に迷子になっています。

4

1 に答える 1

1

コンテンツの入力として取得しているデータをクリーンアップすることから始めます。質問とは少し矛盾しているように見えます。

次に行う必要があるのは、オブジェクトに関する問題のドメインを表すことです。例として、入力ファイルで定義された属性にマッピングする 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() を参照)!

于 2012-07-10T23:29:19.110 に答える