查找字符串列表中的字符串是否在Esper中的另一个字符串列表中

时间:2013-08-26 09:30:26

标签: java mule esper epl

我正在与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

有没有办法实现这个目标?

非常感谢

2 个答案:

答案 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”的组合适合。