java - 合并 Firestore 查询时出现重复数据
问题描述
我的后端是建立在 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));
}
}
}
解决方案
现在还有另一个问题,我得到了重复的数据,所以为了解决这个问题,我决定创建一个哈希集并将我的对象存储在其中,但我仍然在哈希集中得到重复的数据
您正在获取重复数据,因为您正在添加Set
不同类型的对象Model
。集合中的每个Model
对象在内存中都有不同的地址,这就是为什么集合中的每个对象都不同的原因。这Set
是一个扩展 Collection 的接口,因此当使用这样的集合时,您无法知道对象中的字段是否与另一个对象中的另一个字段具有相同的值,除非您指定它。
Set
a和 a之间有很大的区别List
。如果您正在使用:
List<String> list = new ArrayList<>();
list.add("user2426691");
list.add("user2426691");
list.add("user2426691");
Log.d(TAG, list.toString());
您会看到您的列表将包含三个重复的名称。但是,如果您会使用Set
以下代码行中的字符串:
Set<String> set = new HashSet<>(list);
Log.d(TAG, set.toString());
你会注意到你的Set
遗嘱只包含一个元素(没有重复)。
要解决您的问题,您可以使用 aList
或 aSet
但您需要根据条件填充所需的对象集合,这可能是:
if(!model.getName().equals("someName")) {
list.add(model);
}
推荐阅读
- spring-boot - Spring Boot:为执行器端点禁用 https
- java - Java用迷宫读取文本文件并获取所有可能的路径
- c# - 带有两个具有相似代码的 catch 子句的 Try-Catch 块
- python-3.x - Python中的Break语句中的语法错误 - 需要帮助
- angular - 在 NGRX 中任何动作调度后执行效果
- java - 使用 JSch 分别为各个提示提供输入
- typescript - 什么设置导致 Neovim 在打字稿枚举中的格式不一致?
- python - “未定义函数名称”
- objective-c - 为什么 AudioUnit 在带闪电插头的耳机下每帧收集 940 字节
- vulkan - Vulkan 管道衍生品