Drools:String列表的任何值都是另一个String列表的成员

时间:2014-01-08 11:06:18

标签: validation drools

如果字符串列表的任何值是另一个字符串列表的成员,我很难找到如何检入drools。

when

//any value of stringList1 member of stringList2

then 

// whatever...

我想,我可能会使用forall操作,但仍然无法找到方法。任何帮助..?

假设我的验证bean类似于:

 public final class StringListValidationBean {

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

 }

1 个答案:

答案 0 :(得分: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,则可以从bean中引用列表:

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

这将触发两个列表中包含的每个String。

另一种方法是使用List.retainAll()的DRL函数,类似于

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

或者让函数返回带有公共字符串的List。