package com.kurumi.util;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
public class SortUtils {
/**
* 将 list 安装 sortMap 中的传参排序
* @param list 需要排序列表
* @param sortMap key 为需要排序字段, value 中升序asc, 降序desc
* @param <T> 列表元素类型
*/
public static <T> void sort(List<T> list, Map<String, String> sortMap) {
if (list == null || list.isEmpty() || sortMap == null || sortMap.isEmpty()) {
return;
}
// 定义一个比较器
Comparator<T> comparator = new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
int result = 0; // 比较结果,默认为 0,即相等
for (Map.Entry<String, String> entry : sortMap.entrySet()) {
String key = entry.getKey();
String order = entry.getValue().toLowerCase();
try {
Comparable<Object> value1 = (Comparable<Object>) o1.getClass().getMethod(getter(key)).invoke(o1);
Comparable<Object> value2 = (Comparable<Object>) o2.getClass().getMethod(getter(key)).invoke(o2);
// 检查排序字段值是否为空
if (value1 == null || value2 == null) {
// 根据排序顺序将空值放在首位或末尾
if (value1 == null && value2 == null) {
result = 0; // 如果两个值都为空,则认为它们相等
} else if (value1 == null) {
result = order.equalsIgnoreCase("desc") ? -1 : 1;
} else { // value2 == null
result = order.equalsIgnoreCase("desc") ? 1 : -1;
}
} else {
result = value1.compareTo(value2);
}
if (result != 0) {
return order.equalsIgnoreCase("desc") ? -result : result;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
};
// 排序
list.sort(comparator);
}
// 根据属性名获取 getter 方法名称
private static String getter(String fieldName) {
if (fieldName == null || fieldName.length() == 0) {
return null;
}
return "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
}
}
标签:null,return,SortUtils,list,sortMap,result,工具,排序
From: https://blog.csdn.net/Start1234567/article/details/140857197