Drools: доступ к ArrayList как к значению на карте - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить доступ к элементам ArrayList, которые являются значением карты.

Например:

{"height": [-10,20]}, и я пытаюсь получить отдельное значение, скажем, "-10", чтобы провести сравнение при состояние.

Прямо сейчас я делаю:

rule "test"
when
    Params(tol: tolerance)    //recieving the Map
    eval( tol.get("height").get(0) < 0 ) 
then
   ...
end

Он говорит, что функция get не является частью типа Object. Как мне получить значение Arraylist?

1 Ответ

0 голосов
/ 27 мая 2020

Предполагая, что ваши классы выглядят примерно так:

class Params {
  private Map<String, List<Integer>> tolerance;
  public Map<String, List<Integer>> getTolerance() { return this.tolerance; }
}

Тогда вы сможете структурировать правило следующим образом:

rule "test"
when
  // get the Tolerance map and assign to $tolerance
  Params( $tolerance: tolerance ) 

  // get the 'height' list from the $tolerance map, assign to $height
  Map( $height: this["height"] ) from $tolerance

  // Check if the first integer in the $height list is negative
  Integer( this < 0 ) from $height.get(0)
then
   ...
end

Синтаксис this[ key ] работает только для Карты. В зависимости от того, как вы настроили Drools и сколько лет используемой вами версии Drools, $height может быть извлечен как объект, что означает, что вам нужно сначала преобразовать в список, прежде чем использовать метод get(#). .

По возможности избегайте eval, потому что компилятор Drools не может оптимизировать эти вызовы.

...