Android - 通过其中一个字段对HashMap和对象进行排序

时间:2017-10-03 17:56:16

标签: java android android-recyclerview hashmap

我正在构建一个应用程序,它将用户放在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);
            }
        }

consolidatedListListItem的列表:

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。

0 个答案:

没有答案