我的收藏(地图)包含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();
感谢您的任何建议。
答案 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手册。