闲话不多说,直接上才艺!
1.首先先创建一个用于排序的List<Map<String,Object>> list,这里我定义了一个方法返回一个list
public static List<Map<String,Object>> getListMap() throws ParseException {
List<Map<String, Object>> list = new LinkedList<>();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String, Object> map1 = new HashMap<>();
map1.put("name","张三"); //姓名
map1.put("salary", new BigDecimal(18));//薪资
map1.put("birthday", sd.parse("2021-09-09 22:02:36")); //出生年月日
list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("name","李四");
map2.put("salary", new BigDecimal(33));
map2.put("birthday", sd.parse("2021-09-09 22:02:20"));
list.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("name","王五");
map3.put("salary", new BigDecimal(22));
map3.put("birthday", sd.parse("2021-09-09 22:02:43"));
list.add(map3);
Map<String, Object> map4 = new HashMap<>();
map4.put("name","赵六");
map4.put("salary", new BigDecimal(30));
map4.put("birthday", sd.parse("2021-09-09 22:02:11"));
list.add(map4);
Map<String, Object> map5 = new HashMap<>();
map5.put("name","孙七");
map5.put("salary", new BigDecimal(44));
map5.put("birthday", sd.parse("2021-09-09 22:02:11"));
list.add(map5);
Map<String, Object> map6 = new HashMap<>();
map6.put("name","周八");
map6.put("salary", new BigDecimal(15));
map6.put("birthday", sd.parse("2021-09-09 22:02:11"));
list.add(map6);
return list;
}
2.新建一个普通Java类,获取用于排序的字段
public class BaseClase implements Serializable {
public static BigDecimal getMapValueBySalary(Map<String,Object> map ){
return (BigDecimal) map.get("salary");
}
public static Date getMapValueByBirthday(Map<String,Object> map ){
return (Date) map.get("birthday");
}
}
3.开始写main方法进行排序
public static void main(String[] args) throws ParseException {
// 使用集合工具类进行升序排序,先用出生日期排序,再按薪资排序(升序就是o1-o2)
List<Map<String, Object>> list1 = getListMap();
Collections.sort(list1, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
if( ((Date) o1.get("birthday")).compareTo((Date) o2.get("birthday")) == 0 ){
return ((BigDecimal) o1.get("salary")).compareTo((BigDecimal) o2.get("salary"));
} else {
return ((Date) o1.get("birthday")).compareTo((Date) o2.get("birthday"));
}
}
});
System.out.println("------------------------使用集合工具类collections升序排序-----------");
list1.forEach(map -> System.out.println(map));
//使用集合工具类进行降序排序(降序就是o2-o1)
List<Map<String, Object>> list3 = getListMap();
Collections.sort(list3, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
if( ((Date) o2.get("birthday")).compareTo((Date) o1.get("birthday")) == 0 ){
return ((BigDecimal) o2.get("salary")).compareTo((BigDecimal) o1.get("salary"));
} else {
return ((Date) o2.get("birthday")).compareTo((Date) o1.get("birthday"));
}
}
});
System.out.println("------------------------使用集合工具类collections降序排序-----------");
list3.forEach(map -> System.out.println(map));
// 使用Java 8 新特性 stream进行升序排序,先用出生日期排序,再按薪资排序
// BaseClase就是上面提到的,新建的一个普通Java类
List<Map<String, Object>> list2 = getListMap();
List<Map<String, Object>> collect = list2.stream().sorted(Comparator.comparing(BaseClase::getMapValueByBirthday).thenComparing(BaseClase::getMapValueBySalary)).collect(Collectors.toList());
System.out.println("========================使用stream升序排序=========================");
collect.forEach(map -> System.out.println(map));
// 使用Java 8 新特性 stream进行降序排序(在排序结束后使用reversed方法)
List<Map<String, Object>> list4 = getListMap();
List<Map<String, Object>> collect4 = list4.stream().sorted(Comparator.comparing(BaseClase::getMapValueByBirthday).thenComparing(BaseClase::getMapValueBySalary).reversed()).collect(Collectors.toList());
System.out.println("========================使用stream降序排序=========================");
collect4.forEach(map -> System.out.println(map));
}
运行结果:
------------------------使用集合工具类collections升序排序-----------
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
------------------------使用集合工具类collections降序排序-----------
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}
========================使用stream升序排序=========================
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
========================使用stream降序排序=========================
{birthday=Thu Sep 09 22:02:43 CST 2021, name=王五, salary=22}
{birthday=Thu Sep 09 22:02:36 CST 2021, name=张三, salary=18}
{birthday=Thu Sep 09 22:02:20 CST 2021, name=李四, salary=33}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=孙七, salary=44}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=赵六, salary=30}
{birthday=Thu Sep 09 22:02:11 CST 2021, name=周八, salary=15}