在一个表中说100项,这是获得最后20个对象的最佳方法.
我能想到的一种方法是加载所有对象,反转数组,创建一个新数组并从结果循环20次,填充新数组并返回它.
如下所示:
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; }
有没有更好的方法在Android中使用realm.io做到这一点?
更新
到目前为止这是如何处理的..
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; }
解决方法
另请注意,Realm表是无序的.将它们视为放置数据的包.这意味着如果您想要插入最后20个项目,则需要添加一个字段以包含插入时间.这样做还可以让您非常有效地实现您想要的结果:
RealmResults<DataObject>results = realm.where(DataObject.class) .findAllSorted("timestamp",RealmResults.SORT_ORDER_DESCENDING); for (int i = 0; i < 20; i++) { // do magic here }