2014-09-15 2 views
0

Я читаю лист Excel через шаблон DRT (шаблон правила), а затем преобразовываю его в объект класса через статический метод в классе Java. а также вставляя его в рабочую память. Таким образом, рабочая память заполняется всеми фактами из листа Excel.Сравнение объекта (фактов) в рабочей памяти в drools

Теперь я отправляю факты через класс Java в INSERT() через сеанс. Мне нужно совместить два похожих объекта и возвращать сопоставленные объекты из рабочей памяти. Что касается примера:

Читайте из Excel и вставляйте его в рабочую память. Лицо (имя == «Кумар», возраст == 60, статус == истина);

Теперь, в классе Java, через сеанс я вставляю следующий объект: Person (name == "Kumar", Age == 60); , а затем мне нужно установить Status = true, сравнив два объекта.

Мне нужно написать правило, которое будет сравнивать оба объекта.

Просьба предложить способ.

Благодаря Shorav

+0

Что бы «похож "объект? Тот, у кого одно и то же имя и возраст? Должен ли статус быть установлен в true в обоих фактах? Кроме того, если есть третий, четвертый, пятый, ... «похожий» факт с тем же именем и возрастом, должны ли они все быть истинными? – laune

+0

Да, если все проходящие факты, то есть возраст и имя совпадают, мне нужно установить для этого статуса объекта значение true. объявление возвращает его в классы java. – Kumar

+0

, если будет передано более одного факта; все должны быть истинными/ложными. – Kumar

ответ

1

Если мы должны предположить, что это возможно, что есть три или более «подобные» факты, что лучше сделать это следующим образом:

rule "find same name and age" 
when 
    $p1: Person($name: name, $age: age, status == false) 
    $p2: Person(name == name, age == $age, status == false, this != $p1) 
    accumulate($p: Person(name == name, age == $age, status == false); 
       $list: collectList($p)) 
then 
    for(int i = 0; i < $list.size(); i++){ 
     Person p = (Person)$list.get(i); 
     update(p){ setStatus(true) } 
    } 
end 
+0

Я буду его реализовывать. Кстати, как я могу прочитать excel, а затем вставить данные как факт. Спасибо за ваше время. – Kumar

+0

Если вы копаетесь в источнике Drools, вы должны найти код для чтения файла Excel: org/drools/decisiontable/parser/xls/ExcelParser.java, org/drools/decisiontable/SpreadsheetCompiler.java и т. Д. - Он основан на Listeners, который может и не быть простым подходом, который вы могли бы иметь в виду, но он должен содержать ссылки на некоторые полезные классы. – laune

Смежные вопросы