7
With lambda expressions it is possible to filter elements from a collection of objects, creating a data stream according to the criterion passed in the expression for the method filter()
, This guarantees you a way to manipulate the colletions.
It is also possible to specify more than one condition in the expression, see:
filter(pessoa -> pessoa.getIdade() >= 18 && pessoa.getGenero().equals("Feminino"))
In this case two conditions were passed, the first condition specifies people over 18 years and the second specifies gender (in this case, the female). However, what if I wanted to specify various conditions for example:
Obtain persons of legal age of the female sex whose letter name start with the letter M and live in the city of Campos do Jordão.
With various conditions it would be a little difficult to read the code and the condition would be very complex.
However, this is the only way I know to filter elements under various conditions. I would like to know if there is another way to do this, so that the code is not difficult to read, using lambda expressions.
Follow the example that illustrates the situation so that it can be reproduced.
Class Pessoa
:
public class Pessoa
{
private String nome;
private int idade;
private String genero;
private String cidade;
public Pessoa(String nome, int idade, String genrero, String cidade)
{
this.nome = nome;
this.idade = idade;
this.genero = genrero;
this.cidade = cidade;
}
public Pessoa()
{
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getGenero() {
return genero;
}
public void setGenero(String genero) {
this.genero = genero;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
}
Master code:
package lambdaexpressaoexemplo;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class LambdaExpressaoExemplo
{
public static void main(String[] args)
{
List<Pessoa> pessoas = new ArrayList<>();
pessoas.add(new Pessoa("Dener", 24, "Masculino", "Cruzeiro"));
pessoas.add(new Pessoa("Janaina", 22, "Feminino", "Campos do Jordão"));
pessoas.add(new Pessoa("Marciele", 17, "Feminino", "Campos do Jordão"));
List<Pessoa> resultadoPesquisa = pessoas.stream().filter(pessoa -> pessoa.getIdade() >= 18 && pessoa.getGenero().equals("Feminino")).collect(Collectors.toList());
resultadoPesquisa.forEach(p -> System.out.println(p.getNome()));
System.out.println("\nQuantidade de mulheres acima de 18 anos: " + resultadoPesquisa.size());
}
}