With lambda expressions it is possible to filter elements of a collection of objects by creating a stream of data according to the criteria passed in the expression for the filter()
method, this guarantees you a way to manipulate the colletions .
You can also 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 persons over the age of 18 and the second specifies the gender (in this case, the female). However, what if I wanted to specify several conditions for example:
Obtain the female overage whose letter of the name begins with the letter M and that lives in the city of Campos do Jordão.
With several 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 of filtering elements with various conditions. I would like to know if there is another way to do this, in a way that the code is not difficult to read, using lambda expressions.
The example below illustrates the situation so it can be played.
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;
}
}
Primary 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());
}
}