Рубрики
Без рубрики

Поиск Макс./Мин списка или коллекции

Краткое и практическое руководство по получению максимального/минимального элемента из списка или коллекции.

Автор оригинала: baeldung.

1. введение

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

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

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

@Test
public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() {
    // given
    List 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. Вызов mappoint(value -> value) в потоке для получения целочисленного потока
  3. Вызов метода max() в потоке для получения максимального значения
  4. Вызов orElseThrow() для создания исключения, если значение не получено от max()

3. Найдите Min С Пользовательскими Объектами

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

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

class Person {
    String name;
    Integer age;
      
    // standard constructors, getters and setters
}

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

@Test
public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() {
    // given
    Person alex = new Person("Alex", 23);
    Person john = new Person("John", 40);
    Person peter = new Person("Peter", 32);
    List 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() из Java 8 Stream API можно использовать для поиска максимального и минимального значения из Списка/Коллекции.

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