【问题标题】:How to convert RealmResults object to RealmList?如何将 RealmResults 对象转换为 RealmList?
【发布时间】:2015-07-18 20:23:35
【问题描述】:

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

【问题讨论】:

    标签: android realm


    【解决方案1】:
    RealmList <Student> results = new RealmList<Student>();
    
    results.addAll(realmResultList.subList(0, realmResultList.size()));
    

    【讨论】:

    • 我会暂时接受,直到我得到更好的答案
    • 不应该是realmResultList.size()realmResultList.size() - 1
    【解决方案2】:

    请尝试让我知道这是否适合您。

    RealmList <Student> finalList = new RealmList<Student>();
    
    finalList.addAll(yourRealmResults.subList(0, yourRealmResults.size()));
    

    【讨论】:

    【解决方案3】:

    从 0.87.0 开始

    • 添加了 Realm.copyFromRealm() 用于创建 Realm 对象的分离副本 (#931)。

    只允许返回列表List&lt;E extends RealmObject&gt;

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 值得注意的是,这个RealmList的元素将是非托管的,这意味着它们不能被设置为领域对象作为写事务的列表值。
        • 从托管对象中获取它们,不要使用new RealmList&lt;&gt;() 获取它们。
        【解决方案6】:

        RealmResults 如果期望查询提供对象集合(例如RealmQuery&lt;E&gt;.findAll(),则返回。否则,单个对象查询将返回 RealmObject

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

        RealmResults 转换为RealmList

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

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

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

        最后,copyFromRealm() 返回一个List 所以也可以这样做

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

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              代码:

              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

              【讨论】:

                【解决方案10】:

                只是另一种方式:

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

                【讨论】:

                  猜你喜欢
                  • 2019-06-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-04-07
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-10-11
                  • 1970-01-01
                  相关资源
                  最近更新 更多