Java Is Back, Novidade do Java 8
Upcoming SlideShare
Loading in...5
×
 

Java Is Back, Novidade do Java 8

on

  • 1,253 views

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

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

Statistics

Views

Total Views
1,253
Views on SlideShare
1,249
Embed Views
4

Actions

Likes
5
Downloads
26
Comments
0

2 Embeds 4

https://twitter.com 3
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java Is Back, Novidade do Java 8 Java Is Back, Novidade do Java 8 Presentation Transcript

  • 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/