我有一个 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()));
.size()
还是 .size()-1
? - He Yifei 何一非.size()
的第二个参数是长度,而不是位置。 - RalphiliustoIndex
吗?https://docs.oracle.com/javase/8/docs/api/java/util/List.html#subList-int-int- - Farid自0.87.0版本开始
- 新增Realm.copyFromRealm()函数,用于创建Realm对象的分离副本(#931)。
该函数可直接返回一个列表 List<E extends RealmObject>
RealmResults
实现了 List
接口,而 RealmList
也是如此。
RealmList <Student> results = new RealmList<Student>();
results.addAll(realmResultsList);
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
可以是受管理或未受管理的,因为来自 RealmResult
的 RealmObject
可能具有以下结构,在这种情况下,RealmList
是一个受管理的对象:
class User {
int id;
String name;
RealmList<String> petNames;
}
最后,copyFromRealm()
返回一个 List
,因此也可以进行以下操作。
ArrayList<User> users = realm.copyFromRealm(results);
在新的更新中,您可以使用 copyFromRealm 方法来实现:
RealmList<Student> finalList = realm.copyFromRealm(resultsAnswers);
RealmList
的元素将是未被管理的,这意味着它们不能作为列表值在写事务中设置给 Realm 对象。 - EpicPandaForcenew RealmList<>()
获取它们。 - EpicPandaForceRealm有一些新功能,请查看文档:Realm文档
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;
}
另一种做法:
RealmList<YourClass> dummy = new RealmList<>();
Iterator<YourClass> it = realmResultsList.listIterator();
while (it.hasNext()) {
dummy.add(it.next());
}
代码:
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
realmResultList.size()
应该不是应该是realmResultList.size() - 1
吗? - Farid