web-dev-qa-db-fra.com

Comment convertir RealmResults <Object> en List <Object>

J'ai des RealmResults que je reçois de Realm comme

RealmResults<StepEntry> stepEntryResults = realm.where(StepEntry.class).findAll();

Maintenant, je veux convertir RealmResults<StepEntry> en ArrayList<StepEntry>

J'ai essayé 

 ArrayList<StepEntry> stepEntryArray = new ArrayList<StepEntry>(stepEntryResults));

mais l'élément dans ma ArrayList n'est pas mon objet StepEntry, c'est StepEntryRealmProxy enter image description here

Comment puis-je le convertir? .__ Toute aide ou suggestion serait la bienvenue.

10
Linh

Pour lire avec empressement tous les éléments du royaume (et que, par conséquent, tous les éléments de la liste deviennent non gérés, vous pouvez le faire):

 List<StepEntry> arrayListOfUnmanagedObjects = realm.copyFromRealm(realmResults);

Mais vous n'avez généralement aucune raison de le faire à moins de vouloir sérialiser les objets avec GSON (en particulier parce qu'il lit les données de champ avec réflexion plutôt qu'avec des accesseurs). 


Le fait de mélanger realm.copyFromRealm n'importe où ailleurs pour toute autre raison indique une incompréhension fondamentale de la raison pour laquelle Realm a été conçu. C'est une base de données sans copie, après tout. Copier à partir d'une base de données zéro-copie est incertain. 

Bien que techniquement, cela peut avoir un sens si vous voulez l'exposer sous la forme d'un LiveData<PagedList<T>> à partir d'un fil de boucle, en particulier si vous voulez vraiment faire abstraction de Realm. 

(PS: RealmResults<T> implémente déjà List<T>.)

29
EpicPandaForce

La réponse de @EpicPandaForce fonctionne bien. J'ai essayé de cette façon d'optimiser les performances de mon application et je trouve que ce qui suit est un peu plus rapide. Une autre option pour les personnes qui préfèrent la vitesse:

RealmResults<Tag> childList = realm.where(Tag.class).equalTo("parentID", id).findAll();
Tag[] childs = new Tag[childList.size()];
childList.toArray(childs);
return Arrays.asList(childs);
0
Nicholas Ng