领域定义自定义查询条件

时间:2017-02-14 10:33:35

标签: android realm

我想实现与此类似的东西。 假设我有一个领域对象Food

class Food extends RealmObject {
    // stuff
}

像这样的功能界面

interface IsHealthy {
    boolean isHealthy (Food food);
}

IsHealthy接口提供了一种通过对Food对象进行一些计算来确定Food是否健康的方法。

有没有办法编写一个使用此条件的领域查询,以便只从领域数据库中获取Healthy Foods?我一直无法做到这一点,现在我正在通过获取所有食物并在RealmQueryResult在记忆中一个一个地检查它们来做一个解决方法,但这在某种程度上是一个黑客,并且没有'表现不错。

1 个答案:

答案 0 :(得分:1)

Realm不支持此类自定义条件。您只能对每个属性进行单个检查,并将这些检查结合起来过滤您的领域对象。

您可以创建一个看起来像这样的界面

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

此界面的一个实现可能如下所示

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();

希望这有用。