Сортировка массива с помощью лямбда-функции не работает

Я пытаюсь использовать метод .sort() с arraylist.
Мой метод public void sortSurname() должен отсортировать по алфавиту все объекты по фамилии, эти объекты содержатся в массиве ArrayList<Contact> contacts.
Может ли кто-нибудь найти проблему с этим кодом?
Вот что я написал до сих пор:
Контактный класс

package main;
public class Contact {
    private String name, surname, cellphone;
    private Genere genere;
    
    public Contact(String name, String surname, String cellphone){
        this.name=name;
        this.surname=surname;
        this.cellphone=cellphone;
    }

    public String getSurname() {
        return surname;
    }
}

Рубрика класс

public class Rubrica {
    private ArrayList<Contact> contacts;
    
    public Rubrica(){
        contacts = new ArrayList<>();
    }

    public void sortSurname(){
        contacts.sort((Contact c1, Contact c2) -> {
            c1.getSurname().compareTo(c2.getSurname());
        });
    }

    public void addContact(Contact c1){
        contacts.add(c1);
    }
}

Главный

package main;

public class Main {
public static void main(String[] args) {
    Contact c1 = new Contact("Paolo", "Groviera", "338");
    Contact c2 = new Contact("Paolo", "Groviera", "234");
    Contact c3 = new Contact("Lampa", "Dino", "234");
    Contact c4 = new Contact("Lampa", "Dina", "0234");
    
    Rubrica r = new Rubrica();
    r.addContact(c1);
    r.addContact(c2);
    r.addContact(c3);
    r.addContact(c4);

    r.sortSurname();
    System.out.println(r);
    }
}

Спасибо вам за помощь.

Прочтите Как создать минимальный воспроизводимый пример. Тогда редактировать свой вопрос. В настоящее время это минимальное значение приятно, но также невоспроизводимое значение полностью.

Elliott Frisch 09.04.2022 18:01

У меня тоже проблема с этим, я написал код на итальянском. Части выше переведены, так что вы предлагаете мне делать?

Pasqu 09.04.2022 18:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в том, что {} является блоком и требует возврата. Попробуйте это так:

contacts.sort((Contact c1, Contact c2) -> {
   return  c1.getSurname().compareTo(c2.getSurname());
});

или забудьте {} и просто сделайте

contacts.sort((Contact c1, Contact c2) -> 
    c1.getSurname().compareTo(c2.getSurname()));

или используйте интерфейс Компаратор и передайте ссылку на метод.

contacts.sort(Comparator.comparing(Contact::getSurname));

Избавьтесь от { }

public void sortSurname(){
    contacts.sort((Contact c1, Contact c2) -> 
        c1.getSurname().compareTo(c2.getSurname());
    );
}

Другие вопросы по теме