Перейти к основному содержимому

Поиск максимального/минимального значения списка или коллекции

· 2 мин. чтения

1. Обзор

Этот учебник представляет собой краткое введение в то, как найти минимальное и максимальное значения из заданного списка или коллекции с помощью мощного Stream API в Java 8.

2. Найдите Макса в списке целых чисел

Мы можем использовать метод max() , предоставляемый через интерфейс java.util.Stream , который принимает ссылку на метод:

@Test
public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() {
// given
List<Integer> listOfIntegers = Arrays.asList(1, 2, 3, 4, 56, 7, 89, 10);
Integer expectedResult = 89;

// then
Integer max = listOfIntegers
.stream()
.mapToInt(v -> v)
.max().orElseThrow(NoSuchElementException::new);

assertEquals("Should be 89", expectedResult, max);
}

Давайте внимательнее посмотрим на код:

  1. Вызов метода stream() в списке для получения потока значений из списка
  2. Вызов mapToInt(значение -> значение) в потоке для получения целочисленного потока
  3. Вызов метода max() в потоке для получения максимального значения
  4. Вызов orElseThrow() для создания исключения, если от max() не получено никакого значения

3. Найдите минимум с помощью пользовательских объектов

Чтобы найти минимум/максимум для пользовательских объектов, мы также можем предоставить лямбда-выражение для нашей предпочтительной логики сортировки.

Давайте сначала определим пользовательский POJO:

class Person {
String name;
Integer age;

// standard constructors, getters and setters
}

Мы хотим найти объект Person с минимальным возрастом:

@Test
public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() {
// given
Person alex = new Person("Alex", 23);
Person john = new Person("John", 40);
Person peter = new Person("Peter", 32);
List<Person> people = Arrays.asList(alex, john, peter);

// then
Person minByAge = people
.stream()
.min(Comparator.comparing(Person::getAge))
.orElseThrow(NoSuchElementException::new);

assertEquals("Should be Alex", alex, minByAge);
}

Давайте посмотрим на эту логику:

  1. Вызов метода stream() в списке для получения потока значений из списка
  2. Вызов метода min() в потоке для получения минимального значения. Мы передаем лямбда-функцию в качестве компаратора, и это используется для определения логики сортировки для определения минимального значения.
  3. Вызов orElseThrow() для создания исключения, если от min() не получено никакого значения

4. Вывод

В этой быстрой статье мы рассмотрели, как можно использовать методы max() и min() из Stream API Java 8 для поиска максимального и минимального значения в List или Collection .

Как всегда, код доступен на GitHub .