У меня есть список объектов, которые я сортирую по названию данного метода. Эта сортировка первого уровня работает нормально. У меня проблемы с сортировкой по ключу, который является членом вложенного объекта. Любые предложения будут полезны, вот что я получил до сих пор.
Пример объекта с вложенным объектом
public class User{
private String userName;
private String userLastName;
private UserDob userDob;
...
}
public class UserDob{
private int year;
private int month;
private int day;
...
}
Попытка сортировки по UserDob.year не работает с приведенным ниже решением.
public static <T> List<T> sortListOfObjects(T object, List<T> unsortedList, String key, char order) throws NoSuchMethodException {
if(object == null || unsortedList == null || unsortedList.size() == 0){
return null;
}
Method[] methods = object.getClass().getDeclaredMethods();
for(int i = 0; i < methods.length; i++){
String methodName = methods[i].getName();
if(methodName != null && methodName.equalsIgnoreCase("get" + key)){
Function comparingMethodName = getObjectComparingMethod(methodName);
Comparator comparator = Comparator.comparing(comparingMethodName);
if(order == 'd'){
Collections.sort(unsortedList, comparator.reversed());
}else{
Collections.sort(unsortedList, comparator);
}
break;
}
}
return unsortedList;
}
@NotNull
private static <T, U> Function<T, U> getObjectComparingMethod(String methodName) {
return (T tClass)-> {
Object returnObject = null;
try {
Method method = tClass.getClass().getMethod(methodName, new Class[]{});
returnObject = method.invoke(tClass);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
return (U) returnObject;
};
}