1. Introducción
Una introducción rápida sobre cómo encontrar el valor mínimo / máximo de una lista / colección determinada con la potente API Stream en Java8.
2. Encuentra Max en una lista de enteros
Podemos usar el método max () proporcionado a través de la interfaz java.util.Stream . Acepta una referencia de método:
@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); }
Echemos un vistazo más de cerca al código:
- Llamar al método stream () en la lista para obtener un flujo de valores de la lista
- Llamar a mapToInt (valor -> valor) en la secuencia para obtener una secuencia entera
- Llamar al método max () en la secuencia para obtener el valor máximo
- Llamar a orElseThrow () para lanzar una excepción si no se recibe ningún valor de max ()
3. Encontrar mínimo con objetos personalizados
Para encontrar el mínimo / máximo en objetos personalizados, también podemos proporcionar una expresión lambda para nuestra lógica de clasificación preferida.
Primero definamos el POJO personalizado:
class Person { String name; Integer age; // standard constructors, getters and setters }
Queremos encontrar el objeto Person con la edad mínima:
@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); }
Echemos un vistazo a esta lógica:
- Llamar al método stream () en la lista para obtener un flujo de valores de la lista
- Llamar al método min () en la secuencia para obtener el valor mínimo. Estamos pasando una función lambda como comparador, esto se usa para decidir la lógica de clasificación para decidir el valor mínimo
- Llamar a orElseThrow () para lanzar una excepción si no se recibe ningún valor de min ()
4. Conclusión
En este artículo rápido, exploramos cómo se pueden usar los métodos max () y min () de la API Stream de Java 8 para encontrar el valor máximo y mínimo de una lista / colección.
Como siempre, el código está disponible en Github.