如何将 RealmResults 对象转换为 RealmList?

How to convert RealmResults object to RealmList?

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

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

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

如果这对你有用,请尝试告诉我。

RealmList <Student> finalList = new RealmList<Student>();

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

从 0.87.0 开始

  • Added Realm.copyFromRealm() for creating detached copies of Realm objects (#931).

只允许 return 列表 List<E extends RealmObject>

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

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

@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;
}

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

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

代码:

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

另一种方法:

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

RealmResults 是 returned 如果一个查询预计会给出一个对象集合 (例如 RealmQuery<E>.findAll().否则,单个对象查询将 return a RealmObject.

托管和非托管对象
RealmResultsmanaged 对象,这意味着它们不能在 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() returns a List 所以也可以做

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

Realm 有一些新功能签入文档 Realm Documentation

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

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