数据如下,如果name属性有值,那就按照name值排序,按照name排序完之后再按照age排序。
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", null);
map.put("age", 13);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("name", null);
map2.put("age", 15);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("name", null);
map3.put("age", 20);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("name", "CC");
map4.put("age", 50);
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
list.add(map);
list.add(map2);
list.add(map3);
list.add(map4);
list.sort(new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
if (o1 != null && o2 != null && o1.get("name") != null && o2.get("name") != null){
int num = ((String)o1.get("name")).compareTo((String)o2.get("name"));
if ( num != 0){
return num;
} else {
return ((Integer) o1.get("age")).compareTo((Integer) o2.get("age"));
}
}
// 为空的放到一起
return -1;
}
});
结果:[{"name":"CC","age":50},{"age":20},{"age":15},{"age":13}]