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.

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; } 

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 se comprueba si ya se ha cerrado una instancia de reino?
  • ¿Cómo puedo crear una base de datos Realm con datos iniciales para mi aplicación android?
  • ¿Cómo comprobar el reino para la existencia de los datos del androide?
  • Realm con datos pre-poblados en activos?
  • Error del compilador: com.sun.tools.javac.code.Symbol $ CompletionFailure: archivo de clase para rx.Observable no encontrado
  • ¿Los campos de lectura de un objeto Realm son más lentos que los objetos java?
  • RealmResult Muchas relaciones con el adaptador
  • RealmDb: Arquitectura limpia en Android
  • Java Realm obtiene el último elemento insertado
  • List <Object> O RealmList <RealmObject> en Realm Android
  • El objeto no es parte del esquema para este reino
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.