我正在向ArrayList<添加数据HashMap<字符串,对象>> 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中首先显示在线状态联系人。任何帮助,将不胜感激。感谢
答案 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;
}
}
});