我的应用程序从包含类别和其他项目的列表中加载项目
列表是这样的,有重复的类别名称
我想要做的是仅加载类别名称而不重复现有名称
示例:电视节目、太空、自然、汽车
我的鳕鱼:
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data");
Query query = databaseReference.orderByChild("category");
query.addValueEventListener(new ValueEventListener() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
// dataList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
ModelCatMenu dataClass = dataSnapshot.getValue(ModelCatMenu.class);
dataList.add(dataClass);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
数据:
{
"Data": {
"-Nw1n4qAQ7FIlbDVeDCN": {
"category": "Abstract",
"imageLink": "https://",
"name": "name"
},
"-Nw1nB5__Qwrabgu3yJe": {
"category": "Abstract",
"imageLink": "https://",
"name": "name"
},
"-Nw1nKaT_BZUlmKXjnIy": {
"category": "3D",
"imageLink": "https://",
"name": "3d"
},
"-Nw1nRl-PgB6DKUMSsRb": {
"category": "Film",
"imageLink": "https://",
"name": "name"
},
"-Nw2Vfv1SkB8QVHSdPFC": {
"category": "Film",
"imageLink": "https://",
"name": "name"
},
"-Nw2lBoNGo0z79CwXuJq": {
"category": "Film",
"imageLink": "https://",
"name": "name"
}
}
}
我尝试过,但没有成功,缺少一些东西
List<String> uniqueCategories = new ArrayList<>();
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Category category = snapshot.getValue(Category.class);
String categoryName = category.getCategory();
if (!uniqueCategories.contains(categoryName)) {
uniqueCategories.add(categoryName);
}
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Trate o erro, se necessário
}
});
它不起作用的原因是,当您尝试检查列表是否包含某些项目时,它将检查对象的默认
equals
函数,如果某些值不同,则该函数为 false。例如,如果类别相同但任何其他值不同,则会返回 false。要解决这个问题,您唯一需要做的就是重写数据模型上的 equals
函数,并仅检查 category
的值,而不管其余变量如何。这样就可以过滤掉重复的项目。