2016-02-18 3 views
0

У меня есть два массива внутри объекта Colors.Drools обнаруживает несколько совпадений от одного массива к другому

private String[] colorArray = {"blue", "red", "yellow", "green"}; 
private String[] myColors = {"blue", "red", "purple"}; 

Я хочу, чтобы иметь возможность обнаруживать, существует ли более одного совпадения в другом массиве.

rule "check if inside array" 
    when 
     Colors($colors: getMyColors()) 
     $color: String() from $colors 
     Colors(getColorArray() contains $color) 
    then 
     System.out.println("Color found once in array"); 
end 

Так для моего примера, я хотел бы обнаружить, если «синие» и «красные» находятся в colorArray. Я не знаю, есть ли способ автоинкрементации переменной с LHS, чтобы я мог обнаружить, что 2 цвета, которые были найдены.

Спасибо заранее

+0

Должны ли быть массивы? Продолжайте обсуждение, когда эти данные сохраняются в виде Коллекций - Установите, предпочтительно? – laune

+0

Он может храниться в любых коллекциях, они фактически хранятся в ArrayList . Я просто помещаю их в массив, чтобы упростить. –

ответ

0

Вы пишете функцию DRL:

function int cardInter(Collection a, Collection b){ 
    ArrayList x = new ArrayList(a); 
    x.retainAll(b); 
    return x.size(); 
} 

и называют его:

rule "check if inside array" 
when 
    Colors($a: myColors, $b: colorArray) 
    eval(cardInter($a, $b) > 1) 
then 
    System.out.println("Color found more than once"); 
end 

Большую часть времени, массивы делают его более трудным, чем любой из Коллекции. Обратите внимание, что функция DRL может быть легко расширена для массивов.

+0

Работает отлично, спасибо! –

+0

Спасибо, что нашли недостающий тип результата. int будет делать. – laune

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