比较一个数组的元素与数组的arraylist在drools中的相等性

时间:2013-12-03 11:25:42

标签: arrays arraylist drools

我有一个包含3个字符串元素的数组。我想比较这个数组元素与另一个arrayList,它包含许多3个字符串元素的数组,并检查哪个数组匹配。

actualArray = {"query1","date1","result1"};

arrayListToCompare = {{"query1","date1","result1"}, {"query2","date2","result2"},       {"query3","date3","result3"}}

我想用“arrayListToCompare”元素来拼写“actualAarray”的各个元素,以检查它们是否相等。请帮我写一个drools规则。

5 个答案:

答案 0 :(得分:3)

这两个列表以及它们如何插入工作记忆中:

 List<String> los1 = Arrays.asList( "One", "Two", "Three" );
 List<String> los2 = Arrays.asList( "Huey", "Dewey", "Louie" );
 List<String> los3 = Arrays.asList( "Tick", "Trick", "Track" );
 List<List<String>> lol = Arrays.asList( los1, los2, los3 );
 kSession.insert( lol );
 List<String> los = Arrays.asList( "Huey", "Dewey", "Louie" );
 kSession.insert( los );
 kSession.fireAllRules();

这是规则:

rule findinlist
when
    $l1: List()
    $l2: List( this contains $l1 )
then
    System.out.println( $l2 + " contains " + $l1 );
end

这是输出:

[[One, Two, Three], [Huey, Dewey, Louie], [Tick, Trick, Track]] contains [Huey, Dewey, Louie]

通常你不会像这样插入“裸”List对象。

答案 1 :(得分:1)

这适用于您的String示例。

插入事实/执行规则的Java代码:

List<String> arrayToCompare1 = Arrays.asList("query1", "date1", "result1");
List<String> arrayToCompare2 = Arrays.asList("query2", "date2", "result2");
List<String> arrayToCompare3 = Arrays.asList("query3", "date3", "result3");

List<List<String>> arraysToCompare = Arrays.asList(
        arrayToCompare1, arrayToCompare2, arrayToCompare3);

ksession.setGlobal("arraysToCompare", arraysToCompare);

List<String> actualArray = Arrays.asList("query1", "date1", "result1");

List<Object> facts = new ArrayList<Object>();
facts.add(actualArray);

ksession.execute(facts);

进行匹配的DRL代码:

global java.util.List arraysToCompare;

rule "Match rule"
when
    $list : List()
    $listToCompare : List(this == $list) from arraysToCompare
then
    System.out.println("List: " + $list);
    System.out.println("List: " + $listToCompare);
end

答案 2 :(得分:0)

尝试,

  String[] actualArray = {"query1", "date1", "result1"};

    String[][] arrayListToCompare = {{"query1", "date1", "result1"},
    {"query2", "date2", "result2"}};
    boolean found=false;

    for (String[] element : arrayListToCompare) {

        if(Arrays.deepToString(actualArray)
                .equals(Arrays.deepToString(element))){
            found=true;
            break;
        }
    }

   if(found){
         System.out.println("Matched ");
   }
   else{
            System.out.println("Not Matched ");
   }

答案 3 :(得分:0)

只需使用List方法for循环获取get循环获取列表的第一个值,再次list,然后迭代list并与您进行比较array值。

答案 4 :(得分:0)

for (String s : actualArray){
    for (int i = 0; i < arrayListToCompare.length; i++){{
        for (int j = 0; j < arrayListToCompare[i].length; i++)
            if (s.equals(arrayListToCompare[i][j])){
                //do something
            }
        }
    }
}