无法排序ArrayList <hashmap <string,object =“”>&gt;通过Java Android中的单个HashMap对象字段

时间:2017-03-30 22:55:17

标签: java android sorting arraylist

我正在向ArrayList&lt;添加数据HashMap&lt;字符串,对象&gt;&gt; contactList;

我想根据单个字段对contactList进行排序。

我正在添加这样的数据:

HashMap<String, Object> docs = new HashMap<>();
                        docs.put("name", key);
                        docs.put("speciality", speci);
                        docs.put("status", status);  // sort by this field , if contains online it should appear first .
                        docs.put("picture", bp);
                        docs.put("education", educate);
                        docs.put("experience", experi);
                        docs.put("rating", ft);
                        contactList.add(docs);

数据被添加到循环中,之后我将contactList分配给simpleAdapter以获取列表视图。

现在我希望我的联系人列表比较“状态”和“#39;字段,如果状态为&#39; online&#39;首先显示或者如果所有状态都处于脱机状态,则不显示任何内容;

我如何对数据进行排序,我需要稍后在listView中使用此数据,以便在listview中首先显示在线状态联系人。任何帮助,将不胜感激。感谢

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以按anonymous inner class定义比较器,并根据status字段的值进行排序,假设它始终为String,例如:

contactList.sort(new Comparator<Map<String, Object>>() {
    @Override
    public int compare(Map<String, Object> o1, Map<String, Object> o2) {
        if(null != o1.get("status") && null != o1.get("status")){
            return o2.get("status").toString().compareTo(o1.get("status").toString());
        }else if(null != o1.get("status")){
            return 1;
        }else{
            return -1;
        }
    }
});

<强>更新

如果Collections.sort与当前的API版本不兼容,您可以使用list.sort,例如:

Collections.sort(contactList, new Comparator<Map<String, Object>>() {
        @Override
        public int compare(Map<String, Object> o1, Map<String, Object> o2) {
            if(null != o1.get("status") && null != o1.get("status")){
                return o2.get("status").toString().compareTo(o1.get("status").toString());
            }else if(null != o1.get("status")){
                return 1;
            }else{
                return -1;
            }
        }
    });