/***
- 泛型排序。针对集合内的对象的某个字段进行排序。
- @param orderList 原始集合
- @param orderBy 对象中所需排序字段
- @param desc 排序规则。 desc 倒序, asc,正序。
- @return
*/
public List<T> sort(@NotNull List<T> orderList, @NotNull String orderBy, String desc) {
orderList = orderList.stream()
.filter(
T -> {
try {
Field declaredField = T.getClass().getDeclaredField(orderBy);
declaredField.setAccessible(true);
try {
return declaredField.get(T) != null;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return true;
})
.collect(Collectors.toList());
Collections.sort(
orderList,
(o1, o2) -> {
// 降序
try {
Field declaredField = o1.getClass().getDeclaredField(orderBy);
declaredField.setAccessible(true);
Double num1 = Double.parseDouble((String) declaredField.get(o1));
Field declaredField2 = o2.getClass().getDeclaredField(orderBy);
declaredField2.setAccessible(true);
Double num2 = Double.parseDouble((String) declaredField.get(o2));
if ("desc".equals(desc)) {
return num2.compareTo(num1);
}
return num1.compareTo(num2);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
});
return orderList;
}