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

时间:2015-08-31 06:22:31

标签: java date dictionary drools

我的收藏(地图)包含7天的数据。 hashmap的键是YYYY-MM-DD格式的日期 我需要创建一个规则来检查列表[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();

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我建议您编写一个静态方法,检查一组七个String值是否表示七个连续日期:

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

并为规则添加约束:

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

没有简单的方法。

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