【发布时间】:2015-07-18 20:23:35
【问题描述】:
我有一个RealmResults <Student> 对象。我想将其转换为 RealmList <Student> 对象。有什么建议?
【问题讨论】:
我有一个RealmResults <Student> 对象。我想将其转换为 RealmList <Student> 对象。有什么建议?
【问题讨论】:
RealmList <Student> results = new RealmList<Student>();
results.addAll(realmResultList.subList(0, realmResultList.size()));
【讨论】:
realmResultList.size() 是realmResultList.size() - 1?
请尝试让我知道这是否适合您。
RealmList <Student> finalList = new RealmList<Student>();
finalList.addAll(yourRealmResults.subList(0, yourRealmResults.size()));
【讨论】:
.size() 还是.size()-1?
.size()第二个参数是长度,不是位置。
toIndex吗? docs.oracle.com/javase/8/docs/api/java/util/…
从 0.87.0 开始
- 添加了 Realm.copyFromRealm() 用于创建 Realm 对象的分离副本 (#931)。
只允许返回列表List<E extends RealmObject>
【讨论】:
RealmResults 实现了List 接口,RealmList 也是如此。
RealmList <Student> results = new RealmList<Student>();
results.addAll(realmResultsList);
【讨论】:
在新的更新中,您可以使用 copyFromRealm 方法:
RealmList<Student> finalList = realm.copyFromRealm(resultsAnswers);
【讨论】:
RealmList的元素将是非托管的,这意味着它们不能被设置为领域对象作为写事务的列表值。
new RealmList<>() 获取它们。
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);
对非托管对象的更改无论如何都不会影响数据库中的原始对象,除非之后执行与copyFromRealm()相反的realm.copyToRealm(users)。请记住,RealmLists 可以是托管或非托管的,因为来自 RealmResult 的 RealmObject 可以具有以下结构,其中 RealmList 在这种情况下是托管对象:
class User {
int id;
String name;
RealmList<String> petNames;
}
最后,copyFromRealm() 返回一个List 所以也可以这样做
ArrayList<User> users = realm.copyFromRealm(results);
【讨论】:
Realm 有一些新功能签入文档 Realm Documentation
Realm 具有 copyfromRealm 函数,我们可以使用它来将结果转换为列表
RealmList<Student> student=realm.copyfromRealm(Realmresult);
【讨论】:
@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;
}
【讨论】:
代码:
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());
}
【讨论】: