【问题标题】:How to get a value from a map inside a map in drools如何从drools中的地图内的地图中获取值
【发布时间】:2016-04-22 13:37:52
【问题描述】:

我有一个主地图对象,其中包含另一个地图。现在我需要从流口水中获取价值? 我的代码看起来像

HashMap<String,Object> studentsMap = new HashMap<String,Object>();
HashMap<String,int> marksMap = new HashMap<String,int>();
marksMap.put("Maths",98);
marksMap.put("Chemistry",96);
studentsMap.put("JohnDoe", marksMap);

我将这个“studentsMap”对象插入到drools 会话并触发规则。 如何比较drools中的marks值(如果mark大于90如何检查条件)?

【问题讨论】:

    标签: drools


    【解决方案1】:

    建议的解决方案对我不起作用。

    你需要在 eval 中以不同的方式调用 map。

    rule "studentsMap"
    
    when
      Student($marks : markMap)
      eval((int)$marks.get("Maths") > 90)
     then
      System.out.println("mark greater than 90");
    end
    

    还应该进行额外的转换。

    链接:http://lists.jboss.org/pipermail/rules-users/2007-November/003921.html

    UPD:找到了更传统的方法

    rule "studentsMap"
    
    when
      $student: Student($marks : markMap, $marks.get("Maths") > 90)
     then
      System.out.println("mark greater than 90");
    end
    

    您还可以在调用 get 之前检查地图中的键是否存在。

      $student: Student($marks : markMap, $marks.containsKey("Maths"), $marks.get("Maths") > 90)
    

    【讨论】:

      【解决方案2】:

      我还没有尝试过,但可能可以这样做 rule "studentsMap"
      when
      entry : Entry() from $studentsMap.entrySet()
      marksMap : Map() from entry.getValue() markEntry : Entry() from marksMap.entrySet() mark : Number() from markEntry.getValue()
      mark > 90 then
      System.out.println("mark greater than 90");
      end

      【讨论】:

        【解决方案3】:

        我假设您的 Fact name 是 Student。 规则如下所示:

        rule "studentsMap"
        
        when
          Student($markMap : markMaap)
          eval($markMap["Maths"] > 90)
         then
        
         System.out.println("mark greater than 90");
        
        end
        

        【讨论】:

          猜你喜欢
          • 2012-05-28
          • 1970-01-01
          • 2019-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多