我正在向 ArrayList
我想根据联系人列表的单个字段对其进行排序。
我正在添加这样的数据:
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 中显示在线状态联系人。任何帮助,将不胜感激。谢谢
最佳答案
您可以通过匿名内部类
定义比较器,并根据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/