gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:32:52 25 4
gpt4 key购买 nike

我正在向 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com