Как оценить, находится ли значение в списке значений в DROOLS - PullRequest
0 голосов
/ 14 ноября 2018

В DROOLS, если мы ищем, есть ли значение "foo" в списке {fu, fa, fe, fi, fo, foo, fum, doodle, dee}, когда MVEL анализирует это в DRL, мыполучить что-то вроде этого:

if ("foo" == "fu" || "foo" == "fa" || "foo" == "fe" || ...)

Это нормально, если список относительно небольшой, но нам нужно посмотреть, есть ли в списке zipCodes предоставленный zipCode, поэтому нам нужно создать его что-то вроде этого:

Установите zipCodes = getAllZipCodesInNHNYandHalfOfCA () [Таким образом, вы знаете, что в США приблизительно 40 000 zipCodes]

if (zipCodes.contains (customer.getZipCode ()) {... rule оценивается как true}

Я ищу, как научить DROOLS проводить это сравнение так, как нам нужно, а не так, как сейчас.

Мысли, комментарии, предложения?

Спасибо

Джейсон

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вы можете использовать оператор in и указать значения в списке через запятую.Если вы намерены проверить ввод, вы можете использовать « not in » и предпринять соответствующие действия, когда входного значения нет в списке.

например, when Model( fieldName in ("fu", "fa", "foo") ) then <do - something> end

0 голосов
/ 15 ноября 2018

Вы можете вызвать метод Java из вашего правила Drools.Таким образом, вы пишете метод

boolean isZipCodeInArea(String area, String zipCode) {
  return getZipCodesOf(area).contains(zipCode);
}

А затем в правиле Drools, когда часть вы можете вызвать эту функцию:

when 
  isZipCodeInArea("area", "foo")
...