2015-08-31 2 views
0

У меня есть коллекция (Карта) содержит данные 7 дней. Ключи хэш-карты - это даты в формате YYYY-MM-DD
Мне нужно создать правило, чтобы проверить, существует ли строка внутри List [String] в течение всех дней и всех дней подряд. Есть ли способ, которым я могу это сделать?Drools - Проверьте, существует ли карта последовательных дат.

Я пытаюсь использовать содержит, но это не включает проверку последовательных дат.

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

Я полагаю, что вы пишете проверки статический метод означает ли набор из семи значений Струнные семь последовательных дат:

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

и добавить ограничение к правилу:

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

Существует нет простой способ вокруг этого.

Вы можете добавить этот метод как функцию DRL с незначительными изменениями в синтаксисе - см. Руководство Drools.

Смежные вопросы