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 手册。
我的集合(地图)包含 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 手册。