Upload
eder-magalhaes
View
1.477
Download
1
Embed Size (px)
DESCRIPTION
Apresentação utilizada na palestra Java Is Back, Novidades do Java8. Durante evento realizado pelo SouJava.
Citation preview
Lançamento do Java 8 – Java Is Back
Eder Magalhães
@edermag
Novidades do Java 8
Agenda
ü Expecta;va;
ü Interfaces Funcionais, sta;c e default;
ü Stream API;
ü Lambda Expressions;
ü Method reference;
ü Date Time API;
ü Algumas mudanças em Collec;ons;
ü Outras novidades e melhorias;
Expecta;va do Java 8
ü Linguagem mais poderosa: ü O;mizações na VM; ü Melhorias em processamento paralelo;
ü Programação mais diver;da: ü Escreva menos e faça mais; ü APIs modernas e eficientes;
Interfaces Funcionais
ü Layout padrão para interfaces “enxutas”;
ü Interfaces que definem apenas um método abstrado;
ü @FunctionalInterface é opcional (like @Override);
ü São essenciais para o uso de Expressões Lambda;
Interfaces Funcionais Java
ü Interfaces do legado Java, são Funcionais: ü Runnable ü Comparable ü FileFilter ü PathMatcher
Método default em Interfaces
ü Possibilidade de definir o código de um método, em um contrato;
public interface CriterioPontualidade { ... default boolean isPontual() { return getPrevisao.isBefore(getRealizacao()); } }
Método default em Interfaces
ü Principal mo;vação: compa;bilidade com o legado;
ü O método pode ser sobreescrito, sempre prevalesce a versão do objeto (implementador);
ü Compilador não aceita conflitos;
ü Não faz sen;do criar métodos default p/ métodos de Object (equals / hashcode / toString). Compilador não aceita;
Método sta;c em Interfaces
ü Viabilizar a definição de métodos u;litários no próprio contrato;
public interface CriterioPontualidade { ... static Comparator<CriterioPontualidade> sortByPrevisao() { return new Comparator<CriterioPontualidade> () { ... }; } }
Pacote java.util.function
ü JDK 8 disponibiliza uma série de novas interfaces funcionais;
ü Function: recebe um argumento e retorna um objeto;
ü Consumer: recebe um argumento, sem retorno (void);
ü Supply: não recebe argumento e retorna uma objeto;
ü Predicate: recebe um argumento e retorna um boolean;
ü BinaryOperator: recebe dois argumentos e retorna um;
ü Especializações para primi;vos, ex: ToIntFunction;
Stream API
ü Nova API para manipulação de fluxo de dados;
ü API con;da no pacote java.util.stream;
ü As Coleções do Java foram adaptadas para o uso de Stream;
ü Em Coleções atuam de forma similar a um Iterator;
Destaque de Stream
ü forEach: processa cada elemento con;do no Stream;
ü map: permite realizar transformações em dados do stream;
ü filter: uso de critérios p/ avaliar cada elemento do stream;
ü distinct: avalia cada elemento do stream para desconsiderar duplicidades;
ü collect: capturar todos os elementos con;dos em um stream;
ü count, max, sum e vários outros …
Detalhes sobre Stream
ü Intermediate: ü O Stream con;nua aberto, normalmente retornam um novo
Stream. Ex: filter;
ü Terminate: ü O Stream é concluído. Ex: count;
ü Podem ser processados paralelamente;
Lambda
ü A grande novidade do Java 8;
ü O Java mais funcional, incorporando DSLs;
ü Uma forma expressiva de criar funções anônimas (Interfaces Funcionais);
ü Maior impacto para os programadores;
Tarefa simples: ordenar um array
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Tarefa simples: ordenar um array
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } );
Tarefa simples: ordenar um array
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } );
Tarefa simples: ordenar um array
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2) );
Lambda Expression
Tarefa simples: ordenar um array
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (s1, s2) -> s1.compareToIgnoreCase(s2) );
Outra opção
Lambda, a mo;vação
ü Programação direta, mais obje;va;
ü Eliminar verbosidade (código ver;cal);
ü Melhor processamento em ambientes mul;-‐core;
Sintaxe de expressões Lambda
(int x, int y) -> x + y
Argument List Body Arrow Token
Method reference
ü Uma forma mais compacta de escrever expressões Lambda;
ü Lambda definida via nome de um método;
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, String::compareToIgnoreCase );
Com Lambda não é possível fazer:
ü Acessar variáveis non-‐final;
ü Transparência no lançamento de excep;ons;
ü Controle de fluxo, no forEach não é possível encerrar o loop;
Date Time API
ü Nova API para manipulação de datas;
ü Mais clara, organizada e eficiente;
ü Define estruturas para: ü Data e Horario; ü Data; ü Horario; ü Períodos e instantes;
ü Baseada na API Joda Time;
Melhorias na API de coleções
ü Iterable.forEach(Consumer);
ü Collec;on.removeIf(Predicate);
ü Collec;on.stream();
ü Collec;on.parallelStream();
ü Map.forEach(BiConsumer);
ü Map.getOrDefault(Object, V);
Outras melhorias
ü String.join;
ü Novos componentes em Concurrency API;
ü Novos componentes em IO/NIO API;
ü Mudanças em Reflec;on;
ü Objetos opcionais: Optional, OptionalInt, OptionalDouble, OptionalLong;
ü Classe Base64;
ü Novos métodos em Math, Wrappers, ThreadLocal …
Demos
ü As demos dessa palestra foram compar;lhadas na url:
hips://github.com/edermag/java8-‐is-‐back
Links
ü hip://www.techempower.com/blog/2013/03/26/everything-‐about-‐java-‐8/
ü hip://openjdk.java.net/projects/lambda/
ü hip://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
ü hip://download.java.net/jdk8/docs/api/
Obrigado!
ü hips://twiier.com/edermag
ü hip://github.com/edermag
ü hip://edermag.blogspot.com.br/
ü hips://bitbucket.org/edermag/