Java Is Back, Novidade do Java 8

1,918 views
1,747 views

Published on

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

Published in: Technology

Java Is Back, Novidade do Java 8

  1. 1. Lançamento  do  Java  8  –  Java  Is  Back   Eder  Magalhães   @edermag   Novidades  do  Java  8  
  2. 2. 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;  
  3. 3. 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;    
  4. 4. 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;  
  5. 5. Interfaces  Funcionais  Java   ü  Interfaces  do  legado  Java,  são  Funcionais:   ü  Runnable   ü  Comparable   ü  FileFilter   ü  PathMatcher  
  6. 6. 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()); } }
  7. 7. 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;  
  8. 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> () { ... }; } }
  9. 9. 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;  
  10. 10. 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;  
  11. 11. 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  …  
  12. 12. 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;  
  13. 13. 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;  
  14. 14. Tarefa  simples:  ordenar  um  array   String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
  15. 15. 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); } } );
  16. 16. 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); } } );
  17. 17. Tarefa  simples:  ordenar  um  array   String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2) ); Lambda  Expression  
  18. 18. Tarefa  simples:  ordenar  um  array   String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (s1, s2) -> s1.compareToIgnoreCase(s2) ); Outra  opção  
  19. 19. Lambda,  a  mo;vação   ü  Programação  direta,  mais  obje;va;   ü  Eliminar  verbosidade  (código  ver;cal);   ü  Melhor  processamento  em  ambientes  mul;-­‐core;  
  20. 20. Sintaxe  de  expressões  Lambda   (int x, int y) -> x + y Argument  List   Body  Arrow  Token  
  21. 21. 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 );
  22. 22. 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;  
  23. 23. 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;  
  24. 24. 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);  
  25. 25. 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 …  
  26. 26. Demos   ü  As  demos  dessa  palestra  foram  compar;lhadas  na  url:      hips://github.com/edermag/java8-­‐is-­‐back  
  27. 27. 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/  
  28. 28. Obrigado!   ü  eder@yaw.com.br   ü  hips://twiier.com/edermag   ü  hip://github.com/edermag   ü  hip://edermag.blogspot.com.br/   ü  hips://bitbucket.org/edermag/  

×