interface Comporator как использовать в параметрах метода java

Задача стоит такая: Добавить НЕ СТАТИЧЕСКИЙ метод void sort(Comparator<.......> comparator). Данный метод занимается сортировкой данных записанных в поле data используя реализацию сравнения из ПЕРЕДАННОГО объекта comparator.

В общем у меня есть класс

public class DataContainer <T>{
private T[] data;
public void sort(Comparator<? extends T> comporator){

Мне нужно реализовать этот метод что бы он сортировал поле дата. В параметрах метода в дженериках к Comporator<.....> comporator. я поставил ? extends T не зная что по ставить, в задании там стоит многоточие

}
}

Помогите понять смысл реализации метода и надо ли реализовать тут в классе метод compare? Спасибо за помощь)))

введите сюда код


Ответы (1 шт):

Автор решения: Дмитрий

Смысл любого компаратора в том, чтобы реализовать сортировку. В вашем случае конкретно указано, что сортировать нужно массив T, посему и дженерик компаратора будет типизирован T. Разумеется, в Java из коробки уже есть инструменты сортировки как массивов, так и коллекций. В нашем случае это массив, посему используем статические методы утилитного класса Arrays, в частности Arrays.sort. Данный метод может принимать 1 параметр (сам массив, который необходимо отсортировать) либо 2 аргумента (второй и есть компаратор). Первый способ вполне подойдет, к примеру, для Integer либо String. В этом случае нет проблем с реализацией сортировки - числа расположаться в порядке возрастания, а строки - в алфавитном порядке. Но в нашем случае заранее неизвестно, что именно будет хранить массив T, ведь это дженерик. Вполне возможно это будут кастомные объекты, например, хранящие информацию о человеке. И в этом случае непонятно, как именно их сортировать. Возможно, мы хотим выполнить сортировку по фамилии, а может быть по возрасту и т.д. Именно для этого и нужен компаратор, который определит порядок сортировки. Посему реализация будет выглядеть так:

import java.util.Arrays;
import java.util.Comparator;

public class DataContainer<T> {

    private T [] data;

    public void sort(Comparator<T> comporator) {
        Arrays.sort(data, comporator);
    }
    
}

Если что-то не ясно - задавайте свои вопросы. Удачи в изучении!

→ Ссылка