List<Map<String, Object>> list = new ArrayList<>();
现在要做的是,按集合中的某一列排序,样例给的是按age排序,age相同在按name排序,
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "Alice");
map1.put("age", 20);
list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "Tom");
map2.put("age", 9);
list.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("name", "Charlie");
map3.put("age", 20);
list.add(map3);
Map<String, Object> map4 = new HashMap<>();
map4.put("name", "Bob");
map4.put("age", 30);
list.add(map4);
Collections.sort(list, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> m1, Map<String, Object> m2) {
String age1 =m1.get("age").toString();
String age2 = m2.get("age").toString();
if (Integer.parseInt(age1) < 10) {
age1 = "0" + age1; // 在年龄前面添加零,使其成为两位数
}
if (Integer.parseInt(age2) < 10) {
age2 = "0" + age2; // 在年龄前面添加零,使其成为两位数
}
int result = age1.compareTo(age2);
if (result == 0) {
// 如果名字相同,可以尝试比较年龄,例如将一位数的年龄转换为两位数进行比较
String name1 = m1.get("name").toString();
String name2 = m2.get("name").toString();
result = name1.compareTo(name2);
}
return result;
}
});
}
}
上述代码中比较的方法可以修改成
list.sort((m1, m2) -> {
String age1 = m1.get("age").toString();
String age2 = m2.get("age").toString();
if (Integer.parseInt(age1) < 10) {
age1 = "0" + age1; // 在年龄前面添加零,使其成为两位数
}
if (Integer.parseInt(age2) < 10) {
age2 = "0" + age2; // 在年龄前面添加零,使其成为两位数
}
int result = age1.compareTo(age2);
if (result == 0) {
// 如果名字相同,可以尝试比较年龄,例如将一位数的年龄转换为两位数进行比较
String name1 = m1.get("name").toString();
String name2 = m2.get("name").toString();
result = name1.compareTo(name2);
}
return result;
});
排序前打印输出为:
[{name=Alice, age=20}, {name=Tom, age=9}, {name=Charlie, age=20}, {name=Bob, age=30}]
排序后打印输出为:
[{name=Tom, age=9}, {name=Alice, age=20}, {name=Charlie, age=20}, {name=Bob, age=30}]
有一点注意:
Object 没有compareTo方法