Слюни: любое значение списка строк является членом другого списка строк
У меня возникают проблемы, чтобы найти, как проверить в 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;
}
Или пусть функция возвращает список с общими строками.