Drools - Правило, чтобы проверить, не содержит ли массив объект только с определенными свойствами

Я пытаюсь написать правило Drools, чтобы определить, содержит ли массив элементов элемент, выбранный пользователем.

Мой сеанс выглядит следующим образом (по общему признанию, это упрощено, но концепция та же самая):

data = {
    items=[
        {
            prop1=1,
            prop2=2,
            prop4=4
        }
    ],
    selectedItem={
        prop1=1,
        prop2=2
        prop3=3
    }
} 

Данные преобразуются из JSON в HashMaps и ArrayLists - где данные - это HashMap, items - это ArrayList из HashMaps, а selectedItem - это HashMap.

По сути, я хочу, чтобы правило запускалось только тогда, когда массив items не содержит Map, которая напоминает selectedItem. Под "похожим" я подразумеваю, что prop1 и prop2 одинаковы.

Это возможно с Drools?

Я пытался:

when
    Map( data.items not contains Map( prop1 == data.selectedItem.prop1, prop2 == data.selectedItem.prop2 ) )
then
    // do something

Но это возвращает:

Описание Местоположение пути Тип ресурса BuildError: Невозможно проанализировать выражение!(Data.items содержит Map( prop1 == data.selectedItem.prop1, prop2 == data.selectedItem.prop2)): java.lang.Class нельзя преобразовать в org.mvel2.util.MethodStub

0 ответов

Другие вопросы по тегам