Не могу найти минимальный элемент в коллекции

141
29 декабря 2020, 18:20

Ребят, почему ошибка? Что ему не нравится?

import org.belsut.estryn.lessons.task02.details.Detail;
import java.util.*;
public class Sorter {
    private List<Detail> details = new ArrayList<>();
    public Sorter(List<Detail> details) {
        this.details = details;
    }
    private int getMinTime() {
        int min = Collections.min(details);
        return min;
    }
}

Возникает ошибка компиляции:

min(java.util.Collection<? extends T>) in Collections cannot be applied to (java.util.List<import org.belsut.estryn.lessons.task02.details.Detail>)

reason: no instance(s) of type variable(s) T exists to that Detail conform to Comparable

Answer 1

Collections.min принимает коллекцию объектов, которые реализуют Comparable:

<T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)

Ошибка говорит о том, что класс Detail не реализует интерфейс Comparable<Detail> и, соответственно, метод не знает как сравнивать объекты и определять минимум.

Об этом написано в сообщении об ошибке:

reason: no instance(s) of type variable(s) T exists to that Detail conform to Comparable<? super T>

Кроме того, нужно заметить, что min вернет Вам объект типа Detail, а не int который Вы ожидаете получить.

Пути решения проблемы:

  • Реализовать Comparable<Detail> в классе Detail.
  • Воспользоваться перегрузкой min, которая принимает компаратор. Так Вы сможете сортировать по заданному полю, например.
  • Воспользоваться Stream API: использовать Stream.min или сначала Stream.mapToInt затем IntStream.min. Посмотрите пример №3 здесь: Finding Max/Min of a List or Collection.

P.S. Сообщение об ошибке мне пришлось перепечатать. Эти полминуты жизни мне никто не вернет. Поэтому сообщения об ошибке нужно целиком копировать и вставлять в вопрос с виде текста.

READ ALSO
Почему метод не возвращает true, false? [закрыт]

Почему метод не возвращает true, false? [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

105
Ant checkstyle не работает в терминале

Ant checkstyle не работает в терминале

когда я запустила в eclipse все работало, однако в терминале все фейлится

107
Почему в Java нет коллекций типа Queue?

Почему в Java нет коллекций типа Queue?

Смотрю туториал и вижу такие слова:

106
Получить доступ к началу второй строки в TextView

Получить доступ к началу второй строки в TextView

Есть String, который в TextView автоматически переносит слова на вторую строку из-за большое количества слов в одной строкеХотела бы получить доступ...

128