Drools - 检查地图是否存在连续日期

Drools - Check if map exist consecutive dates

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

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

    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();

感谢任何建议。

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

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

并向规则添加约束:

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

没有简单的解决方法。

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