Намиране на Max / Min на списък или колекция

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); }

Нека разгледаме по-отблизо кода:

  1. Извикване на метод stream () в списъка за получаване на поток от стойности от списъка
  2. Извикване на mapToInt (value -> value) в потока, за да получите цялостен поток
  3. Извикване на метод max () в потока, за да получите максималната стойност
  4. Извикване на 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); }

Нека да разгледаме тази логика:

  1. Извикване на метод stream () в списъка за получаване на поток от стойности от списъка
  2. Извикване на метод min () в потока, за да се получи минималната стойност. Предаваме ламбда функция като сравнител, това се използва за определяне на логиката за сортиране за определяне на минималната стойност
  3. Извикване на orElseThrow () за изхвърляне на изключение, ако не се получи стойност от min ()

4. Заключение

В тази кратка статия разгледахме как методите max () и min () от API на Stream API на Java 8 могат да бъдат използвани за намиране на максималната и минималната стойност от списък / колекция.

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