2017-02-14 4 views
1

Я хочу достичь чего-то подобного. Предположим, у меня есть объект области Food.Царство определяет пользовательские условия запроса

class Food extends RealmObject { 
    // stuff 
} 

И функциональный интерфейс, как этот один

interface IsHealthy { 
    boolean isHealthy (Food food); 
} 

The IsHealthy интерфейс дает возможность определить, если Food здоров или не делать некоторые вычисления на Food объекта.

Есть ли способ написать запрос области, который использует это условие, чтобы получить только Healthy Foods из базы данных царства? Я не смог этого добиться, и пока я делаю обходной путь, получая все продукты и проверяя их один за другим, как только RealmQueryResult находится в памяти, но это как-то взломать и не работает хорошо.

+0

'Выполнение некоторых вычислений на объекте Food' определяет вычисления – EpicPandaForce

+0

@EpicPandaForce Это зависит от реализации интерфейса. Идентификатор идеи имеет множество реализаций этого интерфейса и использует его как фильтр при запросе базы данных области. Объект области неизменен. –

+0

Нет такой вещи, как непреложный объект RealmObject. – EpicPandaForce

ответ

1

Realm не поддерживает такие особые условия. Вы ограничиваетесь выполнением отдельных проверок для каждого атрибута и объединяете эти проверки для фильтрации ваших объектов области.

Вы можете создать интерфейс, который выглядит следующим образом

interface IsHealthy { 
    RealmQuery isHealthy (RealmQuery<Food> query); 
} 

Один implemntation этого интерфейса может выглядеть следующим образом

class ForKids implements IsHealthy { 
    @Override 
    RealmQuery isHealthy (RealmQuery<Food> query){ 
     return query.lessThan("sugar",10 /*or whatever*/) 
        .isNotNull("vitamine"); 
    } 
} 

И вы можете использовать его как этот

ForKids forKids = new ForKids(); 
forKids.isHealthy(realm.where(Food.class)).findAll(); 

Надеюсь, это было полезно.

+2

Вау! Этот ответ настолько чище, сэр! Спасибо!! –

+0

Надеюсь, это вам помогло. –

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