[英]Android Array list filter and group items which have the same key value
I got this data from firebase and I want to group the items based on the deadline key value and get an array of grouped data.我从 firebase 获得了这些数据,我想根据截止日期键值对项目进行分组并获得一组分组数据。
{
"-MJTP2ZF4-Qrn3xdK3x4" : {
"comment" : "Clean ",
"deadline" : "9/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTP2ZCNDXlgMsw6bHy",
"subtask" : true,
"title" : "Some "
},
"-MJTP2ZF4-Qrn3xdK3x5" : {
"comment" : "Clean ",
"deadline" : "16/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTP2ZCNDXlgMsw6bHy",
"subtask" : true,
"title" : "Some "
},
"-MJTPy8Q7MyGM5mO0b_N" : {
"comment" : "7.3 C",
"deadline" : "9/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTPy8PdX4DmWWC_DfE",
"subtask" : true,
"title" : "Temp"
},
"-MJTPy8Q7MyGM5mO0b_O" : {
"comment" : "7.3 C",
"deadline" : "16/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTPy8PdX4DmWWC_DfE",
"subtask" : true,
"title" : "Temp"
},
"-MLHTHmzx8J7Ifh0Mecx" : {
"comment" : "Finally ",
"deadline" : "4/11/2020",
"owner" : "Mika",
"repetition" : false,
"title" : "Clean "
},
"-MLHTx_ZK4n5dhkBb8TE" : {
"comment" : "Dirty ",
"deadline" : "04/12/2020",
"owner" : "Mika",
"repetition" : false,
"title" : "Clean "
}
}
and I want to group items based on the deadline key and got something like this我想根据截止日期键对项目进行分组并得到这样的东西
{
"9/11/2020":{
{
"-MJTP2ZF4-Qrn3xdK3x4" : {
"comment" : "Clean ",
"deadline" : "9/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTP2ZCNDXlgMsw6bHy",
"subtask" : true,
"title" : "Some "
},
"-MJTPy8Q7MyGM5mO0b_N" : {
"comment" : "7.3 C",
"deadline" : "9/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTPy8PdX4DmWWC_DfE",
"subtask" : true,
"title" : "Temp"
},
},
"16/11/2020":{
"-MJTPy8Q7MyGM5mO0b_O" : {
"comment" : "7.3 C",
"deadline" : "16/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTPy8PdX4DmWWC_DfE",
"subtask" : true,
"title" : "Temp"
},
"-MJTPy8Q7MyGM5mO0b_O" : {
"comment" : "7.3 C",
"deadline" : "16/11/2020",
"firstDeadline" : "12/10/2020",
"interval" : 7,
"owner" : "Mika",
"parentTaskID" : "-MJTPy8PdX4DmWWC_DfE",
"subtask" : true,
"title" : "Temp"
}
},
"04/12/2020":{
"-MLHTx_ZK4n5dhkBb8TE" : {
"comment" : "Dirty ",
"deadline" : "04/12/2020",
"owner" : "Mika",
"repetition" : false,
"title" : "Clean "
},
"-MLHTHmzx8J7Ifh0Mecx" : {
"comment" : "Finally ",
"deadline" : "4/11/2020",
"owner" : "Mika",
"repetition" : false,
"title" : "Clean "
}
}
}
and this is how I got the data from the firebase I just iterate them and store array list then I want that item list not to be just a list of items but grouped and have a chunk of the items array list这就是我从 firebase 获取数据的方式我只是迭代它们并存储数组列表然后我希望该项目列表不仅仅是一个项目列表而是分组并有一个项目数组列表
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot singleSnapshot : snapshot.getChildren()) {
Task task = singleSnapshot.getValue(Task.class);
mTaskArrayList.add(task);
}
mLogBookRecyclerView.setAdapter(mAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
mDatabaseReference.addValueEventListener(valueEventListener);
The data structure you want to use is a Map, specifically a HashMap.您要使用的数据结构是 Map,特别是 HashMap。
I assumed your Task
class has a getter getDeadline
for the deadline date and it is a String.我假设你的
Task
类有一个用于截止日期的 getter getDeadline
,它是一个字符串。 If you are using one of the many Java inbuilt Date features, modify the class accordingly.如果您正在使用许多 Java 内置日期功能之一,请相应地修改该类。
Map<String,List<Task>> groupedTasks=new HashMap<>();
.
.
.
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot singleSnapshot : snapshot.getChildren()) {
Task task = singleSnapshot.getValue(Task.class);
if(!groupedTasks.containsKey(task.getDeadline())
groupedTasks.put(task.getDeadline(),new ArrayList<Task>());
groupedTasks.get(task.getDeadline()).add(task);
}
mLogBookRecyclerView.setAdapter(mAdapter);
}
You can later access them using the get
method of the Map.您可以稍后使用 Map 的
get
方法访问它们。 For example groupedData.get("16/11/2020")
will return a List<Task>
containing the Tasks of that deadline.例如
groupedData.get("16/11/2020")
将返回一个List<Task>
包含该截止日期的任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.