Evaluación Drools eficiente para el elemento en matriz o colección
Pregunta
Uso Drools 3.0.6 (viejos, lo sé), lo que es una evaluación eficiente para encontrar un hecho en un conocido, fijo y bastante grande matriz o colección (la inversa de contiene, es decir, "está contenido en"). El uso de una serie OR de normal "es igual a" resultados en StackOverflowError como la matriz / colección pueden contener unos pocos miles de entradas, como la evaluación Drools operador binario es recursivo.
Tenemos un solo hecho de valor y una matriz de valores para que coincidan. El "código" actual es el siguiente:
$f: Fact(name="TheFact", $data)
eval(!($data.equals("1") || $data.equals("2") || $data.equals("3") ... ))
para un gran número de valores fijos (1,2,3, ...). Busco algo más parecido a "$ data de (1,2,3, ...)".
Solución
En ocasiones resulta necesario (o que es más legible a) poner un poco de la evaluación en el objeto en sí. A continuación, puede reducir las declaraciones eval a sometihng como eval(!$f.isInRange(1, 200))