Нахождение макс / мин списка или коллекции
1. Вступление
Краткое введение о том, как найти минимальное / максимальное значение из заданного списка / коллекции с помощью мощного APIStream в Java8.
2. Найти Макс в списке целых чисел
Мы можем использовать методmax(), предоставляемый через интерфейсjava.util.Stream. Он принимает ссылку на метод:
@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);
}
Давайте подробнее рассмотрим код:
-
Вызов методаstream() в списке для получения потока значений из списка
-
ВызовmapToInt(value → value) в потоке для получения целочисленного потока
-
Вызов методаmax() в потоке для получения максимального значения
-
ВызовorElseThrow() для выдачи исключения, если отmax() не получено значение
3. Найдите Min с помощью настраиваемых объектов
Чтобы найти мин / макс для пользовательских объектов, мы также можем предоставить лямбда-выражение для нашей предпочтительной логики сортировки.
Давайте сначала определим собственный 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 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() из APIStream Java 8 могут использоваться дляfind the maximum and minimum value from a List/Collection.
Как всегда доступен кодover on Github.