首页  >  文章  >  Java  >  如何在本地合并多个 Firestore 查询,同时保留结果的顺序?

如何在本地合并多个 Firestore 查询,同时保留结果的顺序?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-08 17:49:02654浏览

How can I merge multiple Firestore queries locally while preserving the order of the results?

本地合并 Firestore 查询

本地合并多个 Firestore 查询可能是一项挑战,尤其是在尝试维护结果的正确顺序时。以下是在保留文档顺序的同时有效合并查询的综合指南:

使用whenAllSuccess()合并查询

要合并两个查询并保留其结果的顺序,请考虑使用whenAllSuccess()方法来自 Tasks 类:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query firstQuery = rootRef...
Query secondQuery = rootRef...

Task firstTask = firstQuery.get();
Task secondTask = secondQuery.get();

Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> list) {
         // Iterate over the list to access the merged results in the order of the tasks
    }
});

whenAllSuccess() 方法返回当所有提供的任务都成功时成功完成的单个任务。在这种情况下,list 参数包含快照列表的列表,其中每个元素对应于查询的顺序。

使用 continueWith() 合并查询

合并查询的另一个选项是使用continueWith() 方法,它允许您将任务链接在一起:

firstQuery.get().continueWith(new Continuation<QuerySnapshot, Object>() {
    @Override
    public Object then(@NonNull Task<QuerySnapshot> task) throws Exception {
        QuerySnapshot firstResults = task.getResult();

        // Perform any additional necessary operations with the first results

        // Execute the second query and chain it to the continuation
        return secondQuery.get().continueWith(new Continuation<QuerySnapshot, Object>() {
            @Override
            public Object then(@NonNull Task<QuerySnapshot> task) throws Exception {
                QuerySnapshot secondResults = task.getResult();

                List<DocumentSnapshot> mergedResults = new ArrayList<>();
                mergedResults.addAll(firstResults.getDocuments());
                mergedResults.addAll(secondResults.getDocuments());

                // Return the merged results
                return mergedResults;
            }
        });
    }
}).addOnSuccessListener(new OnSuccessListener<Object>() {
    @Override
    public void onSuccess(Object result) {
        // Cast the result to a List<DocumentSnapshot> and access the merged results
    }
});

在此示例中,将获取第一个查询的结果并执行任何必要的操作。然后,执行第二个查询,并将结果与​​第一组结果合并。

性能注意事项

两种方法都会对应用程序的性能产生不同的影响。 whenAllSuccess() 同时执行所有查询,如果两个查询具有相似的性能配置文件,则效率会更高。 continueWith() 按顺序执行查询,如果一个查询明显慢于另一个查询,这可能会很有用。最终,最佳方法取决于您的用例的具体要求。

以上是如何在本地合并多个 Firestore 查询,同时保留结果的顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn