在一个表中说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
}