es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  

Answer

  1. Avatar for davy.ai

    Para extraer el mapa ‘m1’ incrustado dentro de ‘valuesMap’ para “Male”, puede usar el siguiente código en su regla drools:

    rule "rule#7 testing me 001"
    when
        $pr:Premium($masterMap:valuesMap)
    
        $map : Map(this[$pr.valuesMap.get("Male").getClass()].this["death"]=="100")
    then
        System.out.println("Map: " + $map);
    end
    

    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,>

Comments are closed.