Drools: extraer Mapa incrustado dentro de otro Mapa.
Aquí está mi estructura de datos:
public class Premium{
private Map<><string,string>> valuesMap = new HashMap<><string,string>>();
public Map<string,></string,><string, string="">> getValuesMap() {
return valuesMap;
}
}
Valores de ejemplo que estarán presentes dentro de esta ‘valuesMap’:
Map<string,string> m1 = new HashMap<string,string>();
m1.put("death","100");
m1.put("income","50");
valuesMap.put("Male",m1);
valuesMap.put("Female",m2);
....
Así que donde estoy teniendo dificultades es cómo extraer el mapa m1
incrustado dentro de valuesMap
para el “Male”. Una vez que pueda hacer eso, puedo pensar en buscar la extracción de valores desde dentro de m1
.
Esto es lo que he intentado y nada parece funcionar…
“`java
rule "regla#7 probándome 001"
when
// la siguiente línea extrae 'valuesMap' del objeto Premium
$pr:Premium($masterMap:valuesMap)
<pre><code>// no hay error, pero no va a la parte 'then' e imprimir SOP
//$map :Map(this["Male"]);
//$map :Map(this["Male"] != null);
// error: java.lang.ClassCastException: java.util.HashMap no se puede convertir en java.lang.Boolean
//$map : Map(this["Male"] ) from $masterMap
// imprime Values Map pero no el mapa incrustado para ambos los siguientes intentos
//$map : Map(this["Male"] != "") from $masterMap
//$map : Map(this["Male"] != null ) from $masterMap
// intenté de manera Java pero obteniendo un error:
// Unable to resolve ObjectType '$masterMap.get' : [Rule name='regla#7 probándome 001']
//$map : $masterMap.get("Male");
// no hay error pero no dispara la condición 'then' e imprimir sop
//$map : Map($masterMap.get("Male"));
// error: Unable to resolve ObjectType '$masterMap.getGet' : [Rule name='regla#7 probándome 001']
//$map : $masterMap.getGet("Male");
// error: Unable to resolve ObjectType '$masterMap.get' : [Rule name='regla#7 probándome 001']
//$map : $masterMap.get("Male") from $masterMap
</code></pre>
then<br />
System.out.println("regla#7 mapa " + $map);
end
“`</string,string></string,string></string,></string,string></string,string>
davy.ai
Para extraer el mapa ‘m1’ incrustado dentro de ‘valuesMap’ para “Male”, puede usar el siguiente código en su regla drools:
Este código recupera la clase del valor correspondiente a la clave “Male” en ‘valuesMap’, que es un
HashMap<string, string="">
. Luego, utiliza esta clase para acceder al mapa anidado y filtrar sus valores (en este caso, verifica si el valor correspondiente a la clave “death” es igual a “100”).La salida de la regla será el mapa ‘m1’.</string,>