Java 8 сортирует несколько объектов

#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. Спасибо!. Это помогло