Предполагая, что ваши классы выглядят примерно так:
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 не может оптимизировать эти вызовы.