1. Въведение
Кратко въведение за това как да намерите минималната / максималната стойност от даден списък / колекция с мощния API на Stream в Java8.
2. Намерете Max в списък с цели числа
Можем да използваме метода 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 с персонализирани обекти
За да намерим min / max за персонализирани обекти, можем също да предоставим ламбда израз за нашата предпочитана логика за сортиране.
Нека първо дефинираме персонализирания 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 () от API на Stream API на Java 8 могат да бъдат използвани за намиране на максималната и минималната стойност от списък / колекция.
Както винаги, кодът е достъпен в Github.