Localizando Max / Min de uma lista ou coleção
1. Introdução
Uma introdução rápida sobre como encontrar o valor mínimo / máximo de uma determinada lista / coleção com a poderosa APIStream em Java8.
2. Encontre o máximo em uma lista de inteiros
Podemos usar o métodomax() fornecido por meio da interfacejava.util.Stream. Ele aceita uma referência 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);
}
Vamos dar uma olhada no código:
-
Chamando o métodostream() na lista para obter um fluxo de valores da lista
-
ChamandomapToInt(value → value) no fluxo para obter um fluxo inteiro
-
Chamando o métodomax() no stream para obter o valor máximo
-
ChamarorElseThrow() para lançar uma exceção se nenhum valor for recebido demax()
3. Encontre Min com objetos personalizados
Para encontrar o mínimo / máximo em objetos personalizados, também podemos fornecer uma expressão lambda para nossa lógica de classificação preferida.
Vamos primeiro definir o POJO personalizado:
class Person {
String name;
Integer age;
// standard constructors, getters and setters
}
Queremos encontrar o objetoPerson com a idade 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);
}
Vamos dar uma olhada nesta lógica:
-
Chamando o métodostream() na lista para obter um fluxo de valores da lista
-
Chamando o métodomin() no fluxo para obter o valor mínimo. Estamos passando uma função lambda como um comparador, isso é usado para decidir a lógica de classificação para decidir o valor mínimo
-
ChamarorElseThrow() para lançar uma exceção se nenhum valor for recebido de min()
4. Conclusão
Neste artigo rápido, exploramos como os métodosmax()emin() da APIStream do Java 8 podem ser usados parafind the maximum and minimum value from a List/Collection.
Como sempre, o código está disponívelover on Github.