java - 无法在 Java Android 中按单个 HashMap 对象字段对 ArrayList<HashMap<String, Object>> 进行排序

标签 java android sorting arraylist

我正在向 ArrayList > 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 以用于 ListView 。

现在我希望我的联系人列表比较“状态”字段,如果状态为“在线”,则首先显示,或者如果所有状态均为离线,则不执行任何操作,只显示全部;

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

enter image description here

最佳答案

您可以通过匿名内部类定义比较器,并根据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;
        }
    }
});

更新

如果 list.sort 与当前 API 版本不兼容,您可以使用 Collections.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;
            }
        }
    });

关于java - 无法在 Java Android 中按单个 HashMap 对象字段对 ArrayList<HashMap<String, Object>> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129670/

相关文章:

java - 如何使用字符串中的本地日期检查 X 天是否已经过去

php - 使用 array_multisort() 并将空值放在最后,而不是放在前面

c++ - std::sort 函数有问题。在 2 轮迭代后似乎总是有 1 个元素的空值

java - MySQL DATETIME 精度(joda-time、Hibernate、org.jadira.usertype、hbm2ddl)

java - 在http请求字符串url中添加文本

android - xmlns :android?是什么意思

java - 让EditText不链接?

java - 无法排序。如何按名称对对象列表进行排序?

java - 定义API时应该返回CompletableFuture还是Future?

java - 如何在 javascript 中使用 easpi 的规范化数据