28
Lançamento do Java 8 – Java Is Back Eder Magalhães @edermag Novidades do Java 8

Java Is Back, Novidade do Java 8

Embed Size (px)

DESCRIPTION

Apresentação utilizada na palestra Java Is Back, Novidades do Java8. Durante evento realizado pelo SouJava.

Citation preview

Page 1: Java Is Back, Novidade do Java 8

Lançamento  do  Java  8  –  Java  Is  Back  

Eder  Magalhães  

@edermag  

Novidades  do  Java  8  

Page 2: Java Is Back, Novidade 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;  

Page 3: Java Is Back, Novidade do Java 8

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;  

 

Page 4: Java Is Back, Novidade do Java 8

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;  

Page 5: Java Is Back, Novidade do Java 8

Interfaces  Funcionais  Java  

ü  Interfaces  do  legado  Java,  são  Funcionais:  ü  Runnable  ü  Comparable  ü  FileFilter  ü  PathMatcher  

Page 6: Java Is Back, Novidade do Java 8

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()); } }

Page 7: Java Is Back, Novidade do Java 8

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;  

Page 8: Java Is Back, Novidade do Java 8

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> () { ... }; } }

Page 9: Java Is Back, Novidade do Java 8

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;  

Page 10: Java Is Back, Novidade do Java 8

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;  

Page 11: Java Is Back, Novidade do Java 8

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  …  

Page 12: Java Is Back, Novidade do Java 8

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;  

Page 13: Java Is Back, Novidade do Java 8

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;  

Page 14: Java Is Back, Novidade do Java 8

Tarefa  simples:  ordenar  um  array  

String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};

Page 15: Java Is Back, Novidade do Java 8

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); } } );

Page 16: Java Is Back, Novidade do Java 8

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); } } );

Page 17: Java Is Back, Novidade do Java 8

Tarefa  simples:  ordenar  um  array  

String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2) );

Lambda  Expression  

Page 18: Java Is Back, Novidade do Java 8

Tarefa  simples:  ordenar  um  array  

String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (s1, s2) -> s1.compareToIgnoreCase(s2) );

Outra  opção  

Page 19: Java Is Back, Novidade do Java 8

Lambda,  a  mo;vação  

ü  Programação  direta,  mais  obje;va;  

ü  Eliminar  verbosidade  (código  ver;cal);  

ü  Melhor  processamento  em  ambientes  mul;-­‐core;  

Page 20: Java Is Back, Novidade do Java 8

Sintaxe  de  expressões  Lambda  

(int x, int y) -> x + y

Argument  List   Body  Arrow  Token  

Page 21: Java Is Back, Novidade do Java 8

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 );

Page 22: Java Is Back, Novidade do Java 8

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;  

Page 23: Java Is Back, Novidade do Java 8

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;  

Page 24: Java Is Back, Novidade do Java 8

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);  

Page 25: Java Is Back, Novidade do Java 8

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 …  

Page 26: Java Is Back, Novidade do Java 8

Demos  

ü  As  demos  dessa  palestra  foram  compar;lhadas  na  url:  

   hips://github.com/edermag/java8-­‐is-­‐back  

Page 27: Java Is Back, Novidade do Java 8

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/  

Page 28: Java Is Back, Novidade do Java 8

Obrigado!  

ü  [email protected]  

ü  hips://twiier.com/edermag  

ü  hip://github.com/edermag  

ü  hip://edermag.blogspot.com.br/  

ü  hips://bitbucket.org/edermag/