在Realm中获取嵌套对象很慢

时间:2017-12-20 11:56:51

标签: android realm

我有两个RealmObject类,NodeToUser和Task:

class NodeToUser extends RealmObject {
    int id;
    Task task;
    String otherStuff;
}

class Task extends RealmObject {
    int id;
    String name;
}

现在,我想要所有的任务,其中NodeToUser.otherStuff ==“foo”。

我想出的就是在NodeToUser上执行查询,如下所示:

RealmResults<NodeToUser> nodes = realm.where(NodeToUser.class)
    .equalTo("otherStuff", "foo")
    .findAll();

然后检查结果并收集实际的任务。

List<Task> tasks = new ArrayList<>();
for (NodeToUser n : nodes) tasks.add(n.getTask());

然而,这个迭代结果并收集我真正想要的对象非常慢 - 只是一个粗略的值: 100个NodeToUser对象需要2秒在我的设备上。

问题:是否有更好/更快的方式或某种方式来创建查询,以便我可以直接获取任务列表?

1 个答案:

答案 0 :(得分:1)

class NodeToUser extends RealmObject {
    int id;
    Task task;
    String otherStuff;
}

class Task extends RealmObject {
    int id;
    String name;

    @LinkingObjects("task")
    private final RealmResults<NodeToUser> fromNodes = null;
}

然后

RealmResults<Task> tasks = realm.where(Task.class)
        .equalTo("fromNodes.otherStuff", "foo")
        .findAll();