为了账号安全,请及时绑定邮箱和手机立即绑定

合并 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 关注
  • 325 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号