SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
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/	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (18)

Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
Haskell
HaskellHaskell
Haskell
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
Haskell
HaskellHaskell
Haskell
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Funcao PHP
Funcao PHPFuncao PHP
Funcao PHP
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Seminario haskell
Seminario haskellSeminario haskell
Seminario haskell
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Javascript Avançado
Javascript AvançadoJavascript Avançado
Javascript Avançado
 
Alocação dinâmica em C
Alocação dinâmica em CAlocação dinâmica em C
Alocação dinâmica em C
 
Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...Desmistificando Built-in Functions, Lambda e List Comprehension...
Desmistificando Built-in Functions, Lambda e List Comprehension...
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 

Andere mochten auch

Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeEder Magalhães
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeEder Magalhães
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaEder Magalhães
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesEder Magalhães
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaSEder Magalhães
 
Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2Raphael Adrien
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011Eder Magalhães
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 

Andere mochten auch (13)

Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidade
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o Forge
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistência
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidades
 
REST com JSF 2 e HTML 5
REST com JSF 2 e HTML 5REST com JSF 2 e HTML 5
REST com JSF 2 e HTML 5
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2Construindo uma arquitetura com REST, HTML 5 e JSF 2
Construindo uma arquitetura com REST, HTML 5 e JSF 2
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Prime Faces
Prime FacesPrime Faces
Prime Faces
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 

Ähnlich wie Java Is Back, Novidade do Java 8

Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Java Comunicação Serial
Java Comunicação SerialJava Comunicação Serial
Java Comunicação SerialAndrei Bastos
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+cThiago Freitas
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxItamarGoncalves2
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Danival Calegari
 
Meet up teste api htt-party cucumber
Meet up   teste api htt-party cucumberMeet up   teste api htt-party cucumber
Meet up teste api htt-party cucumberRafael Berçam
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
Introdução a linguagem de programação Lua
Introdução a linguagem de programação LuaIntrodução a linguagem de programação Lua
Introdução a linguagem de programação LuaLeonardo Soares
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 
Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Leandro Rezende
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Kratos879
 

Ähnlich wie Java Is Back, Novidade do Java 8 (20)

Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Java Comunicação Serial
Java Comunicação SerialJava Comunicação Serial
Java Comunicação Serial
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Introdução+à+linguagem+c
Introdução+à+linguagem+cIntrodução+à+linguagem+c
Introdução+à+linguagem+c
 
Aula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptxAula 8 - Modularização e Funções.pptx
Aula 8 - Modularização e Funções.pptx
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
 
Meet up teste api htt-party cucumber
Meet up   teste api htt-party cucumberMeet up   teste api htt-party cucumber
Meet up teste api htt-party cucumber
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Java8
Java8Java8
Java8
 
Usando Java 8 no Android
Usando Java 8 no AndroidUsando Java 8 no Android
Usando Java 8 no Android
 
Introdução a linguagem de programação Lua
Introdução a linguagem de programação LuaIntrodução a linguagem de programação Lua
Introdução a linguagem de programação Lua
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01
 
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
Apostila C++ Básico - UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
 

Mehr von Eder Magalhães

Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EEEder Magalhães
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8Eder Magalhães
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooEder Magalhães
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Eder Magalhães
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoEder Magalhães
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem PráticaEder Magalhães
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 
Profissao java gwt e javafx
Profissao java gwt e javafxProfissao java gwt e javafx
Profissao java gwt e javafxEder Magalhães
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010Eder Magalhães
 

Mehr von Eder Magalhães (18)

Cvc programacao reativa
Cvc programacao reativaCvc programacao reativa
Cvc programacao reativa
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
Profissao java gwt e javafx
Profissao java gwt e javafxProfissao java gwt e javafx
Profissao java gwt e javafx
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
 
Android SestInfo 2010
Android SestInfo 2010Android SestInfo 2010
Android SestInfo 2010
 
JavaFX SestInfo 2010
JavaFX SestInfo 2010JavaFX SestInfo 2010
JavaFX SestInfo 2010
 
Gwt-Guice_TDC2009
Gwt-Guice_TDC2009Gwt-Guice_TDC2009
Gwt-Guice_TDC2009
 

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/