我有一个查询,该查询返回根据特定条件排序的元素列表(返回到DataSnapShot),并且我想知道该列表中某个特定项目(其ID,我知道)所占据的位置而无需进行操作依次浏览清单中的所有项目,如下所示:
for (DataSnapshot postSnapshot: dataSnapshot.getChildren ()) {....}
因为如果我的列表变长,此指令将花费很长时间。
是否有更快的方式访问此项目?
答案 0 :(得分:0)
没有内置操作可获取快照中子节点的索引,因此您必须自己进行操作。如果您只需要一项,则只需在循环中保留一个计数器即可。但是,如果要执行常规查找,则可能需要以允许更快查找的方式存储子节点。
例如,FirebaseUI
库中的FirebaseArray
class保留了List
个子快照,以允许基于索引的高效查找。
许多开发人员保留两个列表:一个带有键,一个带有child.getValue(...)
对象。但是我个人发现,使这两个同步保持更大的负担,而不是它带来的性能优势。不过是YMMV。