#java #sorting #java-8
#java #сортировка #java-8
Вопрос:
public class B {
private String name;
private String value;
//Setters and Get
}
public class C {
private String name;
private String value;
//Setters and Get Methods
}
public class D {
private String name;
private String value;
//Setters and Get
}
public class A {
private B b;
private C c;
private D d;
// Setters and Get
}
public class Example{
List<A> a = new Array List<A>();
//Lets assume a will contain objects of class B, C and D
a .sort( Comparator.comparing(A::getB().getName).thenComparing(A::getC().getName));
}
Отсортируйте поле из одного pojo, затем отсортируйте поле по следующему pojo.
Нужно понять, как выполнять сортировку в этой ситуации. Можем ли мы использовать
Comparator.comparing ()в этом случае?
Ответ №1:
Вы не можете использовать ссылки на методы подобным образом, но вы могли бы просто использовать лямбда-выражения:
a.sort(Comparator.comparing((A x) -> x.getB().getName())
.thenComparing(x -> x.getC().getName()));
Комментарии:
1. 1) x.getB().getName()— x должен быть типом, приведенным к классу rite? 2) Должен ли класс A реализовывать компаратор? Я получаю java.lang. ClassCastException: java.lang. Класс не может быть приведен к java.lang. Сопоставимый
2. Вам нужно
Comparator.comparing((A x) -> x.getB().getName()) .thenComparing(x -> x.getC().getName())
из-за ограниченного вывода типа. @user3233289 это невозможно получитьClassCastException
с тем, что вы опубликовали в своем вопросе.3. Спасибо!. Это помогло