我正在与Esper + Mule一起工作,我正在尝试定义一个POJO和一个事件,但在阅读了Espero的文档后,我还没有找到我真正需要的东西。
我的活动,由POJO代表,有这样的属性:
List<String> Words;
我想要做的是使用关键字IN将其与另一个单词列表进行比较,因此模式将如下所示:
... Words in ('word1', 'word2', 'word3) ...
但是我收到了这个错误:
Collection or array comparison is not allowed for the IN, ANY, SOME or ALL keywords
有没有办法实现这个目标?
非常感谢
答案 0 :(得分:1)
一种方法是创建一个方法来执行您想要的操作,使用esper注册该方法,并从您的EPL语句中引用该方法:
创建帮助器类(对于此示例,我使用EsperUtils.java):
package my.package;
class EsperUtils {
public static boolean contains(List<String> list1, List<String> list2) {
// Check for list1 and list2 to contain same word
for (String s1 : list1) {
for (String s2 : list2) {
if (s1.equals(s2)) return true;
}
}
return false;
}
}
在aem.esper.config.xml中使用esper注册方法:
<plugin-singlerow-function name="contains" function-class="my.package.EsperUtils" function-method="contains" />
使用EPL中的帮助方法:
select * from myEvent where contains(Words,AnotherListOfWords)
您还可以将辅助方法添加到事件POJO而不是辅助类。
答案 1 :(得分:0)
您想查看枚举方法,请参阅http://esper.codehaus.org/esper-4.9.0/doc/reference/en-US/html_single/index.html#enumerationreference 似乎“相交”和“countOf”的组合适合。