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!	
  
ü  eder@yaw.com.br	
  
ü  hips://twiier.com/edermag	
  
ü  hip://github.com/edermag	
  
ü  hip://edermag.blogspot.com.br/	
  
ü  hips://bitbucket.org/edermag/	
  

Java Is Back, Novidade do Java 8

  • 1.
    Lançamento  do  Java  8  –  Java  Is  Back   Eder  Magalhães   @edermag   Novidades  do  Java  8  
  • 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.
    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.
    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.
    Interfaces  Funcionais  Java   ü  Interfaces  do  legado  Java,  são  Funcionais:   ü  Runnable   ü  Comparable   ü  FileFilter   ü  PathMatcher  
  • 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.
    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.
    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.
    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.
    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.
    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.
    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.
    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.
    Tarefa  simples:  ordenar  um  array   String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
  • 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.
    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.
    Tarefa  simples:  ordenar  um  array   String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2) ); Lambda  Expression  
  • 18.
    Tarefa  simples:  ordenar  um  array   String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (s1, s2) -> s1.compareToIgnoreCase(s2) ); Outra  opção  
  • 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.
    Sintaxe  de  expressões  Lambda   (int x, int y) -> x + y Argument  List   Body  Arrow  Token  
  • 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.
    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.
    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.
    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.
    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.
    Demos   ü  As  demos  dessa  palestra  foram  compar;lhadas  na  url:      hips://github.com/edermag/java8-­‐is-­‐back  
  • 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.
    Obrigado!   ü  eder@yaw.com.br   ü  hips://twiier.com/edermag   ü  hip://github.com/edermag   ü  hip://edermag.blogspot.com.br/   ü  hips://bitbucket.org/edermag/