限制领域结果

时间:2015-04-24 16:18:18

标签: android realm

如何限制Realm返回的对象数量? .findAll返回与查询匹配的所有行,而.findFirst仅返回第一行。但是像1000年前的那样呢? .findAll可能返回这么多行,消耗太多内存。

4 个答案:

答案 0 :(得分:15)

很酷的是你不需要担心Realm。从查询返回的结果对象在您访问它们时会懒惰地加载对象及其字段。您的对象永远不会被复制,因此只在内存/磁盘中表示一次。

(当前)实现细节是从查询返回的RealmResults对象只是对匹配对象的引用列表。这些引用是微小的数字,它们被压缩存储,因此占用的内存非常少。因此,即使有100.000匹配,它实际上也不会占用太多内存。对于所有类型的对象,它将占用相同数量的内存,无论它们是一个int字段还是数百个带字符串或大二进制字段的字段。

答案 1 :(得分:1)

我找到了解决这个问题的方法,经过这么多天使用"之间的#34;查询在官方文档https://realm.io/docs/java/latest

中找到

如果你想获取前N个元素,只需将数字从,然后传递给字段名称,如下所示

realm.where(clazz).between("count",0,1000).findAll();

其中,

" count" =字段名称(即pojo中的变量名称)
 " 0" =范围来自  " 1000" =范围

例如:上面的查询将首先从RealmResults获取0到1000。

注意:上述解决方案仅在您拥有行计数的唯一ID时才有效。在我的情况下,我在将值插入Realm之前手动插入行计数值。

答案 2 :(得分:0)

如果您真的只想RealmResults,使用Stream limit方法,可能会出现这种情况:

//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();

答案 3 :(得分:0)

Realm目前不提供任何限制功能,但如果你想要前N个元素

int N=10;   // whatever value you want
Realm mRealm=Realm.getDefaultInstance();

RealmResults<Example> list= mRealm.where(Example.class).findAll();
list.subList(0,N);

最后N个元素

RealmResults<Example> list= mRealm.where(Example.class).findAll();
list.subList(list.size()-N,list.size());
相关问题