Эффективная оценка Drools для элемента в массиве или коллекции - PullRequest
1 голос
/ 26 мая 2009

Используя Drools 3.0.6 (старый, я знаю), какова эффективная оценка для нахождения факта в известном, фиксированном и довольно большом массиве или коллекции (обратная сторона содержит, то есть "содержится в"). Использование серии OR нормальных «равных» результатов приводит к StackOverflowError, поскольку массив / коллекция может содержать несколько тысяч записей, поскольку оценка двоичного оператора Drools является рекурсивной.

У нас есть факт с одним значением и массив значений для сопоставления. Текущий «код» выглядит так:

$f: Fact(name="TheFact", $data)
eval(!($data.equals("1") || $data.equals("2") || $data.equals("3") ... )) 

для большого количества фиксированных значений (1,2,3, ...). Я ищу что-то вроде «$ data in (1,2,3, ...)».

1 Ответ

0 голосов
/ 24 октября 2009

Иногда вам нужно (или это более читабельно) поместить часть оценки в сам объект. Затем вы можете уменьшить количество выражений eval до eval(!$f.isInRange(1, 200))

...