Come limitare la quantità di oggetti che ritorna in Realm? .findAll restituisce tutte le righe corrispondenti alla query e .findFirst restituisce solo il primo. Ma che dire di qualcosa come il primo 1000? .findAll potrebbe restituire così tante righe che consuma troppa memoria.Limiti Risultati reame
risposta
La cosa bella è che non devi preoccuparti di ciò con il Reame. L'oggetto risultato restituito da una query carica pigramente gli oggetti e i relativi campi quando vi si accede. I tuoi oggetti non vengono mai copiati e quindi rappresentati solo una volta nella memoria/disco.
L'implementazione (corrente) di questo è che l'oggetto RealmResults restituito da una query è solo un elenco di riferimenti agli oggetti corrispondenti. Questi riferimenti sono numeri minuscoli che vengono memorizzati in modo da occupare pochissima memoria. Quindi, anche con 100.000 corrispondenze, in realtà non occuperebbe molta memoria. E richiederebbe la stessa quantità di memoria per tutti i tipi di oggetti, indipendentemente dal fatto che abbiano un campo int o centinaia di campi con stringhe o grossi binari.
Un modo potrebbe essere questo, se si vuole veramente solo RealmResults
, utilizzando Streamlimit
metodo:
//get all results of your choice query
RealmResults<TypeClass> entities = realm.where(TypeClass.class).findAll();
//limit using Stream
List<Integer> ids = Stream.of(entities).limit(10).map(x -> x.Id).collect(Collectors.toList());
//return only those ids elments
return realm.where(TypeClass.class).in("Id", ids.toArray(new Integer[])).findAll();
Realm attualmente non forniscono alcuna funzione limite, ma se si desidera primi elementi N
int N=10; // whatever value you want
Realm mRealm=Realm.getDefaultInstance();
RealmResults<Example> list= mRealm.where(Example.class).findAll();
list.subList(0,N);
per gli ultimi N elementi
Ho trovato la soluzione per ottenere questo risultato dopo tanti giorni utilizzando la query "tra" come trovata nei documenti ufficiali https://realm.io/docs/java/latest
Se si desidera recuperare i primi N elementi, è sufficiente passare il conteggio da e verso il nome del campo come di seguito
realm.where(clazz).between("count",0,1000).findAll();
Dove,
"conta" = nome campo (ad esempio nome della variabile nel vostro POJO)
"0" = Range Da
"1000" = Intervallo di
Ad esempio: La query sopra preleverà dapprima 0 a 1000 come RealmResults.
Nota: la soluzione di cui sopra funziona solo se si dispone di un ID univoco con numero di righe. Nel mio caso ho inserito manualmente il valore del conteggio delle righe prima di inserire i valori in Realm.
- 1. Google Maps API v3 - Geocoder risultati questione con limiti
- 2. Come creare una query nidificata in Reame?
- 3. Oggetto reame restituito nil (Swift)
- 4. Reame accedute da thread errato
- 5. Restituisce valori univoci/distinti con query Reame
- 6. Supporto di enumerazioni con il reame?
- 7. Reame che causano un sacco di ANR
- 8. non può compilare app Android con reame
- 9. Realm.io - Reame accessibile dal thread errato
- 10. Reame: l'ordine dei record è stato modificato
- 11. Elimina tutti i dati dallo specifico Oggetto reame Swift
- 12. Elimina il modello dal reame ma mantieni vivo l'oggetto
- 13. Come controllare il reame per l'esistenza di dati Android?
- 14. Che cosa significa il reame di OAuth 1.0?
- 15. Hadoop su OSX "Impossibile caricare le informazioni reame da SCDynamicStore"
- 16. Utilizzo di enum come proprietà del modello di Reame
- 17. limiti UIScreen contro applicationFrame
- 18. Limiti di connessione WCF
- 19. limiti matematici in python?
- 20. Limiti di registrazione appEngine
- 21. Limiti di dimensione array
- 22. Limiti dell'API di Wikipedia
- 23. Limiti di risolutori SMT
- 24. Limiti dell'API Streaming Twitter?
- 25. Sessioni: limiti dimensioni sessione
- 26. ggplot2 limiti di geom_density
- 27. QR code Limiti
- 28. Aggiungi limiti CenterX/CenterY
- 29. Errore limiti rimanenti
- 30. Crea -j Limiti RAM
Non dimenticare di ricalcolare questi in RealmChangeListener di 'entity''s – EpicPandaForce