如何将RealmResults对象转换为RealmList?

27

我有一个 RealmResults<Student> 对象。我想将其转换为 RealmList<Student> 对象。有什么建议吗?

10个回答

22
RealmList <Student> results = new RealmList<Student>();

results.addAll(realmResultList.subList(0, realmResultList.size()));

我现在会接受它,直到我得到更好的答案。 - Ezio123
realmResultList.size() 应该不是应该是 realmResultList.size() - 1 吗? - Farid

13
请尝试并让我知道这是否适合您。
RealmList <Student> finalList = new RealmList<Student>();

finalList.addAll(yourRealmResults.subList(0, yourRealmResults.size()));

.size() 还是 .size()-1 - He Yifei 何一非
.size() 的第二个参数是长度,而不是位置。 - Ralphilius
@Ralphilius 不是应该是 toIndex 吗?https://docs.oracle.com/javase/8/docs/api/java/util/List.html#subList-int-int- - Farid

13

自0.87.0版本开始

  • 新增Realm.copyFromRealm()函数,用于创建Realm对象的分离副本(#931)。

该函数可直接返回一个列表 List<E extends RealmObject>


9

RealmResults 实现了 List 接口,而 RealmList 也是如此。

RealmList <Student> results = new RealmList<Student>();
results.addAll(realmResultsList);

3

RealmResults 是查询预期返回对象集合的结果,例如:RealmQuery<E>.findAll()。否则,单个对象查询将返回 RealmObject

托管和非托管对象
RealmResults托管对象,意味着它们不能在 Realm 事务之外进行操作,并且仅限于创建它们的线程。将 RealmResults 转换为 RealmList 将使数据变为非托管,正如 @epicpandaforce 所指出的那样,即列表中的对象不再与数据库连接,基本上是可以在线程之间传输和操作的普通 Java 对象。

RealmResults 转换为 RealmList

RealmResults<User> results = realm.where(User.class).findAll();
RealmList<Users> users = realm.copyFromRealm(results);

未受管理的对象的更改不会以任何方式影响数据库中的原始对象,除非在执行 realm.copyToRealm(users)(与 copyFromRealm() 相反)之后。请记住,RealmLists 可以是受管理或未受管理的,因为来自 RealmResultRealmObject 可能具有以下结构,在这种情况下,RealmList 是一个受管理的对象:

class User {
  int               id;
  String            name;
  RealmList<String> petNames;
}  

最后,copyFromRealm() 返回一个 List,因此也可以进行以下操作。

ArrayList<User> users = realm.copyFromRealm(results);

3

在新的更新中,您可以使用 copyFromRealm 方法来实现:

RealmList<Student> finalList = realm.copyFromRealm(resultsAnswers);

2
值得注意的是,这个 RealmList 的元素将是未被管理的,这意味着它们不能作为列表值在写事务中设置给 Realm 对象。 - EpicPandaForce
从托管对象获取它们,不要使用 new RealmList<>() 获取它们。 - EpicPandaForce

2

Realm有一些新功能,请查看文档:Realm文档

Realm有copyfromRealm函数,我们可以使用它将结果转换为列表。

RealmList<Student> student=realm.copyfromRealm(Realmresult);

0

@JemshitIskenderov 这应该适用于您的复制。

public RealmList<Student> convertResultToList(RealmResult<Student> realResultsList){
    RealmList <Student> results = new RealmList<Student>();

    for(Student student : realResultsList){
       results.add(copy(student));
    }
}

private Student copy(Student student){
    Student o = new Student();

    o.setCreated(student.getCreated());
    o.setModified(student.getModified());
    o.setDeleted(student.getDeleted());
    o.setName(student.getName());
    //List more properties here
    return o;
}

0

另一种做法:

RealmList<YourClass> dummy = new RealmList<>();
Iterator<YourClass> it = realmResultsList.listIterator();
while (it.hasNext()) {
      dummy.add(it.next());
}

0

代码:

public class RealmCollectionHelper {

     public static <C extends RealmModel> RealmList<C> mapperCollectionToRealmList(Collection<C> objects){
         if (objects == null){
             return null;
         }
         RealmList<C> realmList = new RealmList<>();
         realmList.addAll(objects);

         return realmList;
     }
}

这是我的代码片段:https://gist.github.com/jmperezra/9b4708051eaa2686c83ebf76066071ff


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接