Realm.io Android mejor enfoque para obtener los últimos 20 elementos de una tabla
En una tabla de dejar decir 100 elementos, que es el mejor enfoque para obtener los últimos 20 objetos.
Una forma en la que puedo pensar es cargar todos los objetos, invertir la matriz, crear una nueva matriz y un bucle de los resultados de 20 veces llenar la nueva matriz y devolverla.
- ¿Cuál es la mejor manera de usar List <String> en Realm Android?
- Declaración de actualización en Realm
- Cambiar el nombre de la tabla Realm
- No public RealmResults <E> Constructor?
- Realm java sort con varios campos
Algo como lo siguiente:
public ArrayList<DataObject> getLastItems (int qty){ RealmResults<DataObject>results = realm.where(DataObject.class).findAll(); Collections.reverse(results); ArrayList<DataObject>arrayList = new ArrayList<>(); for (int i = 0; i == qty; i++){ arrayList.add(results.get(i)); } return arrayList; }
¿Hay una manera mejor y más rápida de hacer esto en android usando realm.io?
Actualizar
Esto es hasta ahora cómo se maneja esto.
public ArrayList<DataObject> getLastItems (int qty){ RealmResults<DataObject>results = realm.where(DataObject.class).findAll(); ArrayList<DataObject> arrayList = new ArrayList<>(); for (int i = results.size(); i > Math.max(results.size() - 20, 0) ; i--) { arrayList.add(results.get(i-1)); } return arrayList; }
- Declaración de actualización en Realm android
- Realm Query es posible usar IN?
- ¿Manera apropiada de despejar la tabla / la base de datos del reino?
- Reino que causa un montón de ANR
- Realm query equalTo resultados en nullpointerexception
- Generar error con Realm
- Realm Auto Incremento campo ejemplo
- Convertir RealmResults <E> a Lista <E> con copyFromRealm
También tenga en cuenta que las tablas Realm están desordenadas. Piense en ellos como una bolsa donde poner sus datos. Esto significa que si desea que los últimos 20 elementos que ha insertado tendrá que agregar un campo para contener el tiempo de inserción. Hacer esto también le permitirá lograr el resultado que desea de manera muy eficiente:
RealmResults<DataObject>results = realm.where(DataObject.class) .findAllSorted("timestamp", RealmResults.SORT_ORDER_DESCENDING); for (int i = 0; i < 20; i++) { // do magic here }
Esta pregunta ha sido casi cerrada, pero encontré otra forma de averiguar esa situación, no sé si es la mejor opción o una buena práctica, @ChristianMelchior puede decir mejor que yo sobre eso (vi su colaboración con el proyecto de reino ) … bueno, los códigos dicen más que palabras.
RealmResults<Appointment> appointments; List<Appointment> appointments = appointments.subList(0, appointments.size());
Como podemos ver, respondiendo a su pregunta Johan, sólo puede cambiar el índice para obtener todos los objetos que desee!
RealmResults sólo crea objetos que realmente utilice, por lo que iterar sobre todos ellos para invertir la lista sería un mal rendimiento. En lugar de como bmunk descrito, usted debe apenas encontrar el índice apropiado y comenzar de allí, como el abajo. Tenga en cuenta que los Reinos no están ordenados así que sin una ordenación, los elementos devueltos no estarían bien definidos.
public ArrayList<DataObject> getLastItems (int qty){ RealmResults<DataObject>results = realm.where(DataObject.class).findAll().sort("fieldName"); ArrayList<DataObject> arrayList = new ArrayList<>(); for (int i = Math.max(result.size() - 20, 0); i < results.size() ; i++) { arrayList.add(results.get(i)); } return arrayList; }
Debe evitar copiar objetos a menos que sea estrictamente necesario. Una vez que has hecho un findAll () ya tienes una lista ordenada. A continuación, sólo puede utilizar max (results.size () – 20, 0) para saber en qué índice iniciar su iteración en lugar de copiar.
Hazlo así
Realm mRealm=Realm.getDefaultInstance(); RealmResults<Example> list= mRealm.where(Example.class).findAll(); list.subList(list.size()-20,list.size());
- Cómo cambiar el color del texto en TextView en volar como en css?
- Android / bitmap.h: Ningún archivo o directorio (después de actualizar las herramientas de Android SDK a la revisión 14)