Java 8 Flashcards
Qual a sintaxe de uma função lambda?
(argumento) -> (corpo)
O argumento de uma sintaxe lambda pode ser nulo?
Sim! O exemplo abaixo é aceitável:
() -> System.out.println(“Hello World”);
O corpo de uma sintaxe lambda pode ser nulo?
Não! Apenas o campo de argumentos pode ser nulo.
Quando os parênteses não são obrigatórios em uma sintaxe lambda?
Quando existir apenas um argumento
Quando o tipo do argumento for implícito
(String s) -> { System.out.println(s); } //OK
String s -> { System.out.println(s); } //NÃO COMPILA
s -> { System.out.println(s); } // OK
O uso de parênteses na sintaxe dos argumentos lambdas é obrigatório quando?
Quando não houver argumentos
Quando os argumentos tiverem seu tipo explicitamente declarados
Quando o número de argumentos for maior ou igual a 2
(String s) -> { System.out.println(s); }
(int a, int b) -> { return a + b; }
() -> System.out.println(“Hello World”);
Quando o uso de colchetes é obrigatório em uma sintaxe lambda?
Caso tenha apenas um parâmetro no corpo da função os colchetes não são obrigatórios.
Se a expressão lambda consistir de mais de uma linha, ela deve estar entre colchetes e cada expressão dever terminar com um ponto e virgula.
(oldState, newState) -> System.out.println(“State changed”)
(oldState, newState) -> {
System.out.println(“Old state: “ + oldState);
System.out.println(“New state: “ + newState);
}
Quando o uso de colchetes não é obrigatório em uma sintaxe lambda?
Caso tenha apenas um parâmetro no corpo da função os colchetes não são obrigatórios.
Se a expressão lambda consistir de mais de uma linha, ela deve estar entre colchetes e cada expressão dever terminar com um ponto e virgula.
(oldState, newState) -> System.out.println(“State changed”)
(oldState, newState) -> {
System.out.println(“Old state: “ + oldState);
System.out.println(“New state: “ + newState);
}
Como fazer o uso do return em uma expressão lambda?
É possível retornar um valor da expressão lambda assim como acontece com métodos.
Neste caso o ponto e virgula é sempre obrigatório. Mesmo que a expressão tenha uma única linha.
(param) -> {
System.out.println(“param: “ + param);
return “return value”;
}
(a1, a2) -> { return a1 > a2; }
Quando o ponto e virgula é obrigatório?
Se a expressão tiver mais de uma linha.
Se a expressão for um return.
(a1, a2) -> { return a1 > a2; }
O que é uma interface funcional?
É uma interface com apenas um método abstrato.
Mesmo que esta interface tenha outros métodos default ou static, se ela tiver apenas um método abstrato, pode ser considerada funcional.
A classe abaixo é uma interface funcional?
public interface DisplayFunction { void mostrar(String string); }
Sim
Pois possui apenas um método abstrato.
A classe abaixo é uma interface funcional?
public interface DisplayFunction { void mostrar(String string); default void imprimir(String string){ System.out.println(string); } }
Sim
Pois mesmo que tenha um método default, possui apenas um método abstrato.
A classe abaixo é uma interface funcional?
public interface DisplayFunction { void mostrar(String string); void imprimir(String string){ System.out.println(string); } }
A classe não compila pois tem um método abstract com implementação.
A classe abaixo é uma interface funcional?
public interface DisplayFunction { default void imprimir(String string){ System.out.println(string); } }
Compila, mas não é uma interface funcional pois não possui um método abstrato.
public interface DisplayFunction { void mostrar(String string); void ler(String string); }
Compila, mas não é uma interface funcional pois possui dois métodos abstratos.