1. введение
Краткое введение о том, как найти минимальное/максимальное значение из заданного списка/коллекции с помощью мощного Stream API в Java 8.
2. Найдите Max в списке целых чисел
Мы можем использовать метод max() , предоставленный через java.util.Поток интерфейс. Он принимает ссылку на метод:
@Test public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() { // given ListlistOfIntegers = 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); }
Давайте подробнее рассмотрим код:
- Вызов метода stream() в списке для получения потока значений из списка
- Вызов mappoint(value -> value) в потоке для получения целочисленного потока
- Вызов метода max() в потоке для получения максимального значения
- Вызов 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); Listpeople = Arrays.asList(alex, john, peter); // then Person minByAge = people .stream() .min(Comparator.comparing(Person::getAge)) .orElseThrow(NoSuchElementException::new); assertEquals("Should be Alex", alex, minByAge); }
Давайте посмотрим на эту логику:
- Вызов метода stream() в списке для получения потока значений из списка
- Вызов метода min() в потоке для получения минимального значения. Мы передаем лямбда-функцию в качестве компаратора, она используется для определения логики сортировки для определения минимального значения
- Вызов orElseThrow() для создания исключения, если значение не получено от min ()
4. Заключение
В этой краткой статье мы рассмотрели, как методы max() и min() из Java 8 Stream API можно использовать для поиска максимального и минимального значения из Списка/Коллекции.
Как всегда, код доступен на Github .