我有一个包含3个字符串元素的数组。我想比较这个数组元素与另一个arrayList,它包含许多3个字符串元素的数组,并检查哪个数组匹配。
actualArray = {"query1","date1","result1"};
arrayListToCompare = {{"query1","date1","result1"}, {"query2","date2","result2"}, {"query3","date3","result3"}}
我想用“arrayListToCompare”元素来拼写“actualAarray”的各个元素,以检查它们是否相等。请帮我写一个drools规则。
答案 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
}
}
}
}