2013-08-26 3 views
0

Я работаю с Esper + Mule, и я пытаюсь определить POJO и событие, но после прочтения документации Espero I haven ' я нашел то, что мне действительно нужно.Найти, если строка в списке строк находится в другом списке строк в Esper

Мое событие, представленное в 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 

есть ли способ достичь т его?

Большое спасибо

ответ

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; 
    } 
} 

метод Регистрация с Esper в aem.esper.config.xml:

<plugin-singlerow-function name="contains" function-class="my.package.EsperUtils" function-method="contains" /> 

Используйте вспомогательный метод в вашем EPL:

select * from myEvent where contains(Words,AnotherListOfWords) 

Вы также можете добавить вспомогательный метод к вашему событию POJO вместо класса-помощника.

0

Вы хотели бы посмотреть на методы перечисления см http://esper.codehaus.org/esper-4.9.0/doc/reference/en-US/html_single/index.html#enumerationreference Это кажется, что «пересекаются» и «countOf» в сочетании подойдет.

+0

Я не могу заставить это работать так, поскольку Esper нуждается во всех параметрах, которые будут событиями. Или, по крайней мере, это то, что я понимаю из ошибок. – user2417250

Смежные вопросы