public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<>(); Map<String, String> map = new HashMap<>(); Map<String, String> map1 = new HashMap<>(); Map<String, String> map2 = new HashMap<>(); Map<String, String> map3 = new HashMap<>(); map.put("name", "zhangsan"); map.put("sortRule", "d"); map1.put("name", "lisi"); map1.put("sortRule", "a"); map2.put("name", "wangwu"); map2.put("sortRule", "b"); map3.put("name", "wangwu"); map3.put("sortRule", "a"); list.add(map); list.add(map1); list.add(map2); list.add(map3); System.out.println("排序前:"+list); Collections.sort(list, new Comparator<Map<String, String>>() { @Override public int compare(Map<String, String> m1, Map<String, String> m2) { String m1Key = m1.get("sortRule"); String m2Key = m2.get("sortRule"); int i = m1Key.compareTo(m2Key); if(i>0){ return 1; }else if(i<0){ return -1; }else{ return 0; } } }); System.out.println("排序后:"+list); }
重写的compare方法返回值有有啥用,根据什么来排序的?
int i = m1Key.compareTo(m2Key); if(i>0){ return 1; }else if(i<0){ return -1; }else{ return 0; } //替换成 return m1Key.compareTo(m2Key); //更简洁
有啥用: 这个返回值代表了被比较的那两个东西谁大谁小,1就是前面的大,0是一样,-1是后面的大。
根据什么来排序的:根据两个map中的sortRule的值
多谢
这应该跟js,.net的sort一样,大于0表示前面的大,小于0表示后面的大,等于0表示一样大,这里的大于0,可能固定是1,也可能是一般是1,小于0,也可能固定是-1,也可能一般是-1,习惯。