首頁  >  文章  >  Java  >  如何在本機上合併多個 Firestore 查詢,同時保留結果的順序?

如何在本機上合併多個 Firestore 查詢,同時保留結果的順序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 17:49:02657瀏覽

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