public static <T> void sort(List<T> list, String field, String order) {
Comparator<T> comparator = (obj1, obj2) -> {
try {
Field field1 = obj1.getClass().getDeclaredField(field);
field1.setAccessible(true);
Comparable fieldValue1 = (Comparable) field1.get(obj1);
Field field2 = obj2.getClass().getDeclaredField(field);
field2.setAccessible(true);
Comparable fieldValue2 = (Comparable) field2.get(obj2);
if (fieldValue1 == null && fieldValue2 == null) {
return 0;
} else if (fieldValue1 == null) {
return 1;
} else if (fieldValue2 == null) {
return -1;
}
if (order.equalsIgnoreCase("asc")) {
return fieldValue1.compareTo(fieldValue2);
} else if (order.equalsIgnoreCase("desc")) {
return fieldValue2.compareTo(fieldValue1);
} else {
throw new IllegalArgumentException("Invalid order: " + order);
}
} catch (Exception e) {
throw new RuntimeException("Error accessing field " + field, e);
}
};
list.sort(comparator);
}