O GoConqr está de visual novo! Conte para nós o que você achou.

Notas

9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Português 8 páginas

9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate

Conteúdo das notas (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

9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate

9.5 - Escrever uma expressão lambda simples que consome uma expressão 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

9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate

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

9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate

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 {}

Informações

Descrição
Concursos Públicos Desenvolvimento de Software (OCAJP 8 Online Course) Notas sobre 9.5 - Escrever uma expressão lambda simples que consome uma expressão lambda Predicate, criado por Luis Felipe Guariento em 13-09-2019.
Visualizações
1
Avaliação

Fale Conosco

Sobre o que é sua mensagem?

O que você acha do novo visual?

Você gostou?