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);
}
Давайте внимательнее посмотрим на код:
- Вызов метода
stream()
в списке для получения потока значений из списка - Вызов
mapToInt(значение -> значение)
в потоке для получения целочисленного потока - Вызов метода
max()
в потоке для получения максимального значения - Вызов
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);
}
Давайте посмотрим на эту логику:
- Вызов метода
stream()
в списке для получения потока значений из списка - Вызов метода
min()
в потоке для получения минимального значения. Мы передаем лямбда-функцию в качестве компаратора, и это используется для определения логики сортировки для определения минимального значения. - Вызов
orElseThrow()
для создания исключения, если отmin() не получено никакого значения
4. Вывод
В этой быстрой статье мы рассмотрели, как можно использовать методы max()
и min() из
Stream
API Java 8 для поиска максимального и минимального значения в List
или Collection
.
Как всегда, код доступен на GitHub .