我正在构建一个应用程序,它将用户放在recyclerView中,并考虑用户参与的团队的名称。 所以我决定使用HashMap进行这种分组,我得到了用户所在团队的Id,并生成了一个最终的List,以便在我的适配器中处理。
这些是执行此分组的方法:
private HashMap<String, List<UserProject>> groupDataIntoHashMap(List<UserProject> listOfPojosOfJsonArray) {
HashMap<String, List<UserProject>> groupedHashMap = new HashMap<>();
for (UserProject pojoOfJsonArray : listOfPojosOfJsonArray) {
String hashMapKey = pojoOfJsonArray.getTeamId();
if (groupedHashMap.containsKey(hashMapKey)) {
// The key is already in the HashMap; add the pojo object
// against the existing key.
groupedHashMap.get(hashMapKey).add(pojoOfJsonArray);
} else {
// The key is not there in the HashMap; create a new key-value pair
List<UserProject> list = new ArrayList<>();
list.add(pojoOfJsonArray);
groupedHashMap.put(hashMapKey, list);
}
}
return groupedHashMap;
}
在上述方法之外,我称之为:
HashMap<String, List<UserProject>> groupedHashMap = groupDataIntoHashMap(ActivityTeams.listUsers);
for (String date : groupedHashMap.keySet()) {
TeamItem dateItem = new TeamItem();
dateItem.setTeam(date);
consolidatedList.add(dateItem);
for (UserProject pojoOfJsonArray : groupedHashMap.get(date)) {
GeneralItem generalItem = new GeneralItem();
generalItem.setPojoOfJsonArray(pojoOfJsonArray);//setBookingDataTabs(bookingDataTabs);
consolidatedList.add(generalItem);
}
}
consolidatedList
是ListItem
的列表:
public abstract class ListItem {
public static final int TYPE_TEAM = 0;
public static final int TYPE_GENERAL = 1;
abstract public int getType();
}
这是我的TeamItem
课程:
public class TeamItem extends ListItem {
private String team;
public String getTeam() {
return team;
}
public void setTeam(String team) {
this.team = team;
}
@Override
public int getType() {
return TYPE_TEAM;
}
}
这是我的GeneralItem
课程:
public class GeneralItem extends ListItem {
private UserProject pojoOfJsonArray;
public UserProject getPojoOfJsonArray() {
return pojoOfJsonArray;
}
public void setPojoOfJsonArray(UserProject pojoOfJsonArray) {
this.pojoOfJsonArray = pojoOfJsonArray;
}
@Override
public int getType() {
return TYPE_GENERAL;
}
}
这完美无缺!但问题是,不幸的是,显示的用户没有按字母顺序排序。所以我认为如果我在调用HashMap
方法之前对列表进行排序,它会起作用:
ActivityTeams.listUsers = response.body();
Collections.sort(ActivityTeams.listUsers, new Comparator<UserProject>() {
@Override
public int compare(final UserProject object1, final UserProject object2) {
return object1.getName().compareTo(object2.getName());
}
});
部分工作是因为即使用户被分成小组并按字母顺序排序,即使在我这样做之后,团队也没有被显示出任何分类:
ActivityTeams.listTeams = response.body();
Collections.sort(ActivityTeams.listTeams, new Comparator<Team>() {
@Override
public int compare(final Team object1, final Team object2) {
return object1.getName().compareTo(object2.getName());
}
});
重要的是要提到,如果用户不在任何团队中,getTeamId()
将返回null,我应该将所有这些用户分组到一个选项卡&#34; No team&#34;。
所以,我想知道在调用HashMap
时是否可以对用户和团队进行分组。
我想显示标签&#34; No team&#34;首先在我的recyclerView。