【问题标题】:Drools - Check if map exist consecutive datesDrools - 检查地图是否存在连续日期
【发布时间】:2015-08-31 06:22:30
【问题描述】:

我的收藏(地图)包含 7 天的数据。 hashmap 的键是格式为 YYYY-MM-DD
的日期 我需要创建一个规则来检查 List[String] 中是否存在所有日期的字符串,并且所有日期都是连续的日期。有什么办法可以吗?

我正在尝试使用 contains,但它不包括检查连续日期。

    rule "bonus A"

    lock-on-active true
        when
        dataBinding : DataBinding($data : data)     items : List( size > 6 ) 
           from collect(  List(this contains "1" &&
                                this contains "2" &&
                                this contains "3" ) from $data.values )  then
             dataBinding.addPoint(7.5);       
 end

这是我的代码

Map<String, Object> data = new HashMap<String, Object>();
        data.put("2015-08-03", Arrays.asList("2", "3", "1", "4"));
        data.put("2015-08-05", Arrays.asList("2", "3", "1", "4"));
        data.put("2015-08-04", Arrays.asList("2", "3", "1", "4"));
        data.put("2015-08-07", Arrays.asList("2", "3", "1", "4"));
        data.put("2015-08-06", Arrays.asList("2", "3", "1", "4"));
        data.put("2015-08-09", Arrays.asList("2", "3", "1", "4"));
        data.put("2015-08-08", Arrays.asList("2", "3", "1", "4"));
        DataBinding dataBinding = new DataBinding();
        dataBinding.setData(data);

        ksession.insert(dataBinding);
        ksession.fireAllRules();

感谢您的任何建议。

【问题讨论】:

    标签: java date dictionary drools


    【解决方案1】:

    我建议你编写一个静态方法来检查一组七个字符串值是否表示七个连续日期:

    static boolean consecutive (Set<String> dates){
        // ...
    }
    

    并为规则添加约束:

    rule "bonus A"
    when
        dataBinding : DataBinding($data : data)
        eval( consecutive( $data.keySet() ) )   
        items : List( size > 6 ) ...
    

    没有简单的方法解决这个问题。

    您可以将此方法添加为 DRL 函数,只需对语法稍作更改 - 请参阅 Drools 手册。

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2017-05-31
      • 2020-02-20
      • 1970-01-01
      • 2019-06-10
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      相关资源
      最近更新 更多