7
respostas

Dúvida Lambda

Não consegui identificar o motivo das expressões serem validas e invalidas abaixo:

a) Predicate<List> bigger = list -> list.size() > 1000;

b) Predicate<String> startsWithA = s -> s.startsWith("A");

c) Predicate big = list -> list.size() > 100;

d) String name="";
Predicate isEmpty = s -> s.equals("");
7 respostas
Predicate<List> bigger = list -> list.size() > 1000;
  • Está correto porque:
    • O parâmetro list não precisa ter seu tipo declarado pois o generics do Predicate<List> já declarou isso;
      • Não houve necessidade do {} após o "->" pois o Lambda só contém uma instrução, deixando o {} opcional.
b) Predicate<String> startsWithA = s -> s.startsWith("A");
  • Está correto porque:
    • Pelos mesmos motivos do item a;
      • Como agora possuo um Predicate<String>, significa que o parâmetro "s" é uma String, permitindo que eu invoque o método "startsWith";
      • Lambda válido
c) Predicate<Integer> big = list -> list.size() > 100;

Está incorreto porque: Predicate está declarando um Integer em seu generics, Predicate<Integer> tornando o parâmetro "list" um Integer, no qual não possui nenhum atributo static SIZE. Código não compila, lambda inválido.

d) String name=""; Predicate<String> isEmpty = s -> s.equals("");
  • Está correto porque:
    • Mesmos motivos do item b.

Pessoal para mim o exercício apresentou 3 opções:

Predicate startsWithA = s -> s.startsWith("A") Predicate bigger = list -> list.size() > 1000 Predicate big = list -> list.SIZE> 100

E que no caso são validas... Alguém deve ter removido a opção correta.

Atualmente o site valida a opção abaixo como invalida o que pode causar confusão;

Predicate big = list -> list.SIZE> 100

@Native public static final int SIZE = 32;

Todas as opcoes estão corretas. O exercício está inconsistente.

Pessoal, essa aqui está errada:

Predicate<Integer> big = list -> list.SIZE> 100

Integer nao tem um ateibuto chamado SIZE, entao nao compila.

O ruim do exercicio é que ele esta mudando toda hora as alternativas e falando que a "correta" (que na verdade está errada) é a C. Só que C varia :)

Tirei a frase do C. Ajustei a resposta para falar o que coloquei aqui.

Olá Paulo.

O wrapper Integer possui o atributo SIZE.

/* The number of bits used to represent an {@code int} value in two's complement binary form. @since 1.5 / @Native public static final int SIZE = 32;

Quando eu tento executar o código a seguir compilar normalmente:

        Predicate<Integer> big = list -> list.SIZE> 100;
        System.out.println(big.test(10));

Eu entendimento está correto?

O seu entendimento está correto e eu falei uma besteira sem tamanho! Muito bom Rafael

Na prova nao vai cair um código que vá te cobrar saber do atributo SIZE de Integer em uma pergunta focada em lambda. Ainda mais para um código que nao tem pé nem cabeça (como é static final, pra que alguem gostaria de comparar o de todos os integers da lista?)

Editei o exercício para que haja uma opção completamente errada.

haha, ok então. agora é fazer uns simulados e tentar a prova na próxima semana!

Obrigado Paulo!