亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

合并 Firestore 查詢時出現重復數據

合并 Firestore 查詢時出現重復數據

MMTTMM 2021-12-30 16:44:10
我的后端建立在 Firestore 上,并且沒有邏輯OR來構建我的查詢,因此為了解決這個問題,我使用多個查詢并將它們合并來模擬邏輯OR,查詢請求和合并工作完美,但現在還有另一個問題我得到了重復數據,所以為了解決這個問題,我決定創建一個HashSet并將我的對象存儲在其中,但我仍然在哈希集中獲得重復數據這是我合并查詢的方法:    Tasks.whenAllSuccess(c).addOnSuccessListener(new BaseValueOnSuccessListener(mapper, firebaseCallback));c 是 Task 的集合這是我存儲數據的方式(在我的自定義 BaseValueOnSuccessListener 偵聽器中):請檢查我的 OnSuccess 方法public class BaseValueOnSuccessListener<Model, Entity> implements OnSuccessListener<List<QuerySnapshot>> {    private FirebaseMapper<Entity, Model> mapper;    // FirebaseDatabaseRepositoryCallback is an interface    private FirebaseDatabaseRepository.FirebaseDatabaseRepositoryCallback<Model> callback;    public BaseValueOnSuccessListener(FirebaseMapper<Entity, Model> mapper,                                      FirebaseDatabaseRepository.FirebaseDatabaseRepositoryCallback<Model> callback) {        this.mapper = mapper;        this.callback = callback;    }    @Override    public void onSuccess(List<QuerySnapshot> querySnapshots) {        // Do what you need to do with your list        if (!querySnapshots.isEmpty()) {            // List<Model> data = new ArrayList<>();            Set<Model> data = new HashSet<>();            for (QuerySnapshot querySnapshot : querySnapshots) {                data.addAll(mapper.mapList(querySnapshot));            }            callback.onSuccess(new ArrayList<Model>(data));        }    }}
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

現在還有另一個問題我得到了重復數據,所以為了解決這個問題,我決定創建一個哈希集并將我的對象存儲在其中,但我仍然在哈希集中獲得重復數據


您將獲得重復數據,因為您正在添加Set不同類型的對象Model。Model集合中的每個對象在內存中都有不同的地址,這就是為什么集合中的每個對象都不同的原因。這Set是一個擴展 Collection 的接口,因此當使用這樣的集合時,除非您指定它,否則您無法知道對象中的字段是否與另一個對象中的另一個字段具有相同的值。


aSet和 a之間有很大的區別List。如果您正在使用:


List<String> list = new ArrayList<>();

list.add("user2426691");

list.add("user2426691");

list.add("user2426691");

Log.d(TAG, list.toString());

您會看到您的列表將包含三個重復的名稱。但是,如果您Set在以下代碼行中使用了 a of 字符串:


Set<String> set = new HashSet<>(list);

Log.d(TAG, set.toString());

你會注意到你的Set遺囑只包含一個元素(沒有重復)。


要解決您的問題,您可以使用 aList或 aSet但您需要根據條件填充所需的對象集合,這可能是:


if(!model.getName().equals("someName")) {

    list.add(model);

}


查看完整回答
反對 回復 2021-12-30
  • 1 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號