Слюни: любое значение списка строк является членом другого списка строк

У меня возникают проблемы, чтобы найти, как проверить в drools, если какое-либо значение списка строк является членом другого списка строк.

when

//any value of stringList1 member of stringList2

then 

// whatever...

Я полагаю, я могу использовать операцию "Форалл", но все равно не могу найти способ. Любая помощь..?

Допустим, мой валидационный бин выглядит примерно так:

 public final class StringListValidationBean {

   private List<String> stringList1;
   private List<String> stringList2;
   //... gets & sets

 }

1 ответ

Решение

Попробуй это:

rule someString
when
    $l1: List()
    $s: String() from $l1
    List( hashCode > $l1.hashCode, this contains $s )
then
    System.out.println( "both: " + $s );
end

Если важно использовать ValidationBean, на списки можно ссылаться из компонента:

$vb: ValidationBean( $sl1: stringList1 )
$s: String() from $sl1
ValidationBean( this == $vb, stringList2 contains $s )

Это будет срабатывать для каждой строки, содержащейся в обоих списках.

Другим подходом будет функция DRL, которая использует List.retainAll(), что-то вроде

function boolean (List l1, List l2){
    List is = new ArrayList( l1 );
    is.retainAll( l2 );
    return is.size() > 0;
}

Или пусть функция возвращает список с общими строками.

Другие вопросы по тегам