Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как найти максимум и минимум в списке

Короткий ответ

Collections.max() и Collections.min() находят наибольший и наименьший элементы:

void main() {
    var numbers = List.of(7, 2, 9, 4);
 
    IO.println(Collections.max(numbers));
    IO.println(Collections.min(numbers));
}

Результат:

9
2

По полю объекта

Передайте компаратор по нужному полю:

record Product(String name, double price) {}
 
void main() {
    var products = List.of(new Product("Tea", 3.5), new Product("Cake", 12.0), new Product("Water", 1.2));
 
    var expensive = Collections.max(products, Comparator.comparingDouble(Product::price));
    IO.println(expensive.name());
}

Результат:

Cake

Через поток

Stream.max() возвращает Optional — это безопасно для пустого списка:

void main() {
    List<Integer> empty = List.of();
 
    IO.println(empty.stream().max(Integer::compare));
    IO.println(empty.stream().max(Integer::compare).orElse(0));
}

Результат:

Optional.empty
0

Частая ошибка

Вызвать Collections.max() у пустого списка:

void main() {
    List<Integer> empty = new ArrayList<>();
    IO.println(Collections.max(empty));
}

Результат:

Exception in thread "main" java.util.NoSuchElementException

Проверьте isEmpty() заранее или используйте поток с orElse().

Функции из этого ответа

  • Collections.max() — Находит наибольший элемент коллекции.
  • Collections.min() — Находит наименьший элемент коллекции.
  • Stream.max() — Находит наибольший элемент потока.
  • Comparator.comparing() — Создаёт компаратор, который сравнивает объекты по одному полю.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.