Java 8 para o dia a dia

21
Java 8 para o dia a dia Exemplos práticos de como aplicar as novas apis no seu trabalho

Transcript of Java 8 para o dia a dia

Java 8 para o dia a diaExemplos práticos de como aplicar as novas apis

no seu trabalho

Desenvolvedor desde 2012Java Web, AngularJS e AndroidCertificações OCJP e OCJPA

Email: [email protected]://github.com/RicardoRFariahttps://br.linkedin.com/in/ricardorfaria/pt/

Ricardo Faria

Java 8 para webFrameworks com suporte:- Spring 4+ o que inclui Spring Boot- JSF (dependendo do ambiente)

Containers com suporte:- Tomcat, Jersey e Undertow (Servlet)- Wildfly 8 (Java EE)- Glassfish 4.1 (Java EE)

Java 8 para web [2]Clouds com suporte no PAAS- Amazon- Openshift- Bluemix- Azure (demanda configuração adicional)

Novas funções da collection- Sort- ForEach- RemoveIf

Exemplos na classe: NovidadesCollection.java

Novas funções da api de map- ForEach- Remove (preciso - por chave e valor)- Replace- ComputeIfPresent, ComputeIfAbsent- GetOrDefault

Exemplos na classe: NovidadesMap.java

String JoinCom a vinda do java 8, String ganhou um novo método chamado join(), utilizado para concatenar várias strings.

Exemplo na classe: StringJoin.class

Lambda functions- São funções inline, que implementam uma interface funcional;

- Tipo, parâmetro e retorno inferidos automaticamente pela JVM;

- Lambdas não podem manter estado e nem modificar variáveis do escopo anterior.

Interfaces funcionais- Apenas um método abstrato- Interfaces já existentes podem ser funcionais (Ex: Runnable)

- A annotation @FunctionalInterface demarca uma interface funcional, mas não é obrigatória.

Métodos default- O modificar default permite implementar um método na interface;

- Não precisam ser reimplementados, mas podem;

- Não pode ser final.

Criar outra collection para filtrar algo. NUNCA MAIS!- O filter permite filtrar collection com base em um Predicate;

- Predicate que é uma interface funcional do java 8, portanto podemos utilizar Lambda.

Exemplo de códigoClasses- CarrosIdadeProcessor.java- VariasManeirasDeSeEscreverLambda.java

- ImportacaoArquivo.java

Interface x Classe abstrata

- Interfaces não podem ter métodos final, classes abstratas podem;

- Classes podem implementar várias interfaces, mas somente extender uma classe abstrata.

Stream- As stream são a base para criação do lambda no Java;

- Streams são divididas entre serial e parallels;

- São imutáveis, ou seja, não modificam a collection;

- Não devem ser reaproveitadas.

Outras várias funções da stream- Distinct- FindAny, FindFirst- First, Last- Min, max, count- Collect- Reduce

Exemplos na classe: CalculadoraIdadeCarro.java

Cuidados com Stream- Processamento collections que tem outras collections;

- Repetição de etapas da stream em mais de uma linha do seu código;

- Parallels apenas para os casos necessários;

- Streams que ultrapassam 2 linhas de código.

Stream CollectorUtilizada para colletar resultados de streams;A classe estática Collectors provê vários coletores prontos como:- Agrupadores- Média, Soma, Mínimo, Máximo- Conversões em collections

Exemplos em: CollectorsNaPratica.java

Optional<T>Optionals são wrappers genéricos que representam um objeto que pode ser nulo;Retornado por streams quando o resultado pode ser nulo;Caso o objeto seja nulo, é possível efetuar ações como:- Retornar um objeto como no pattern

“NullObject”;- Lançar uma exception

Exemplo na classe: OptionalNaPratica.java

Nova api de tempoA terceira api de tempo provida no java agora trás solução para diversos problemas que encontramos no dia a dia, como:- Duração;- Intervalo entre períodos;- Manipulação dos tempos;- Representação em outros formatos.

Vantagens da nova api de tempo- Separação de conceitos clara;- Você escolhe se tempo, data ou os dois serão utilizados;

- A api utiliza internamente valores sem formato, permitindo fácil formatação;

- Imutável portanto thread safe.Exemplo na classe: TimeNaPratica.java

Links da palestraCódigo no github: https://github.com/RicardoRFaria/PalestraJava8Recomendação de livro:http://www.casadocodigo.com.br/products/livro-java8