You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Usar expressões lambda em ‘variável local’ nos parâmetros
Usar interface funcional, incluindo: Predicate, Consumer, Function e Supplier
Usar variações primitivas e binárias do pacote java.util.function
Resumo
Quando usar var, deverá usar para todos os parâmetros;
O tipo reservado var, poderá ser usado como nome de variável;
Uma variável usada em uma expressão lambda, deverá sempre ser final ou efetivamente final;
A expressão efetivamente final, refere-se somente a variável local;
Quando for declarar um tipo para o nome de algum parâmetro, então deverá declarar para todos os parâmetros;
Quando for declarar um corpo com chaves, então deverá usar um return;
Um método default pode ser declarado como public;
Um método private pode ser declarado como static;
Quando uma classe ou interface implements/extends outras 2 ou mais interfaces que tenham o mesmo método default, então esse deverá ser subscrito. Caso contrário, não irá compilar;
Para chamar um método default, deverá: Interface.super.metodoDesejado();
Vantagem de usar o método default:
Compatibilidade com versões anteriores;
Conveniência em classes implementando a interface;
java.uti.function
/*** Interface usada para gerar algo, sem passar parâmetros. É frequentemente usada, para construir novos objetos.*/@FunctionalInterfacepublicinterfaceSupplier<T> {
Tget();
}
/*** Interface usada para fazer algo, recebendo um parâmetro. Sem retorno (void).*/@FunctionalInterfacepublicinterfaceConsumer<T> {
voidaccept(Tt);
defaultConsumer<T> andThen(Consumer<? superT> after) {...}
}
/*** Interface usada para fazer algo, recebendo 2 parâmetros. Sem retorno (void).*/@FunctionalInterfacepublicinterfaceBiConsumer<T> {
voidaccept(Tt, Uu);
defaultBiConsumer<T, U> andThen(BiConsumer<? superT, ? superU> after) {...}
}
/*** Interface que recebe 2 parâmetros e produz um resultado.*/@FunctionalInterfacepublicinterfaceBiFunction<T, U, R> {
Rapply(Tt, Uu);
default <V> BiFunction<T, U, V> andThen(Function<? superR, ? extendsV> after) {...}
}
/*** Interface que recebe 1 parâmetro e produz um resultado. Retorna o mesmo tipo do input.*/@FunctionalInterfacepublicinterfaceUnaryOperator<T> extendsFunction<T, T> {
static <T> UnaryOperator<T> identity(){...}
}
/*** Interface que recebe 2 parâmetros e produz um resultado. Retorna o mesmo tipo do input.*/@FunctionalInterfacepublicinterfaceBinaryOperator<T> extendsBiFunction<T,T,T> {
publicstatic <T> BinaryOperator<T> minBy(Comparator<? superT> comparator) {...}
publicstatic <T> BinaryOperator<T> maxBy(Comparator<? superT> comparator) {...}
}