Apuntes
9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate
Contenido del apunte (8)
Página 1
Introdução a expressão lambda
Expressões lambda permitem a você tratar funcionalidade por meio de um argumento de método, ou código como dado.
Expressões lambda são similares a classes anônimas, exceto que somente podem ser declaradas como implementações de interfaces funcionais ( interfaces com apenas um único método abstrato ).
Página 2
Sintaxe para lambda expression
Uma lambda expression consistem de 3 elementos:
Uma lista separada por vírgulas de parâmetros envoltos por parênteses.
O token "flecha" (->)
Um corpo (body), consistindo de uma expressão simples ou um bloco sentencial
Exemplo:
(Intenger i, Integer j) -> { return i == j;};
O código acima é um exemplo de lambda expression. Essa expressão tem uma lista de parâmetros, o token arrow (->) e um bloco de sentenças.
Página 3
Exemplo para lambda predicate
// Interface Declaration
public interface NumberComparator{
boolean compare(Integer first, Integer second);
}
// method using the above interface
public void compareEquality(Map<Integer,Integer> map, NumberComparator comparator){
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(comparator.compare(entry.getKey(), entry.getValue())){
System.out.println(entry);
}
}
}
Nesse exemplo temos uma lambda expression que consome um predicate expression.
No exemplo acima temos um interface funcional chamada NumberComparator que deve conter somente um método abstrato.
Abaixo vemos como uma lambda expression implementará essa interface:
O método compareEquality consome a implementação do NumberComparator.
O método print irá imprimir todas as entradas do argumento do método somente se os campos key e value satisfaçam a condição imposta pela interface NumberComparator.
Página 4
Lambda predicate Exemple
Map map = new HashMap<>();
map.put(0,1);
map.put(2,2);
compareEquality(map,(Integer i, Integer j) -> {
return i == j;
})
Vamos ver como um lambda expression é passado no método compare equality.
Após a construção de um objeto Map, passamos esse Map através de um lambda expression cujo corpo é uma simples predicate expression. Uma vez que o corpo consiste em somente 1 sentença, e os tipos de parâmetro podem ser inferidos a partir do contexto, essa expressão lambda pode ser reduzida a:
compareEquality(map, (i,j) -> i == j);
Página 5
Exemplo - Lambda predicate
Acima temos a interface funcional utilizada nessa demonstração. Essa interface tem apenas um método abstrato, que receberá dois argumentos inteiros e retornará um valor booleano.
O método compareEquality tem um parâmetro de tipo NumberComparator( o mesmo da interface ), o qual já discutimos. Cada entrada do Map passado será impresso no console se o único método do argumento comparator avaliar para true.
No método compareEquality passamos a expressão lambda. Essa expressão avalia para true caso dois argumentos sejam iguais ou false caso contrário. Com tal argumento lambda expression, somente o segundo argumento do Map será impresso ( 2 == 2).
No caso acima, o corpo do lambda expression contém somente uma sentença. Então, a expressão pode ser reduzida a: compareEquality( map, (int i, int j) -> i == j );
Também os tipos de argumento podem ser inferidos a partir da declaração da interface NumberComparator. Os especificadores do tipo podem então ser deixados de lado: compareEquality( map, (i, j) -> i == j );
Página 6
Questões
Resposta D. Uma expressão lâmbda somente pode ser utilizada em lugares onde uma interface funcional é esperada. Não é esse o caso aqui, onde um argumento booleano deve ser passado.
Página 7
No cenário acima, a opção B será inválida pois os tipos de parâmetros do método compare são wrapper Integer, mas os tipos de parâmetros passados na expressão lâmbda são int - primitivo. As declarações não batem e o método produz falha de compilação.
Opção C também será inválida pois a presença da palavra-chave return significa que o corpo da expressão lâmbda necessita ser um bloco de sentença. Faltam as chaves assim: ValueComparator comparator = (Integer i, Integer j )-> {return i > j;};
Opção A é válida pois os tipos dos parâmetros podem ser inferidos pela declaração do método compare. Resposta A.
Página 8
Resumo
Expressões lâmbda são construções que permitem ao desenvolvedor tratar funcionalidade como argumento de método ou código como dados.
Uma expressão lâmbda consiste de três elementos: uma lista separada por vírgulas de parâmetros formais envoltos por parênteses, o token "->" e o corpo da expressão, que consiste de uma expressão simples ou então um bloco de sentenças chaveado {}
Información
- Descripción
- Concursos Públicos (OCAJP 8 Online Course) Desenvolvimento de Software Apunte sobre 9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate, creado por Luis Felipe Guariento el 13/09/2019.
- Creado por
- Luis Felipe Guariento
- Visitas
- 1
- Valoración