O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

TDC2016POA | Trilha Java - Atualizando para Java 8 na prática!

162 visualizações

Publicada em

Atualizando para Java 8 na prática!

Publicada em: Educação
  • Seja o primeiro a comentar

TDC2016POA | Trilha Java - Atualizando para Java 8 na prática!

  1. 1. Globalcode – Open4education Atualizando para Java 8 na prática Filipe Portes @filipeportes
  2. 2. Globalcode – Open4education @filipeportes Desenvolvedor FullStack e líder de equipe na TecSinapse Mais de 8 anos de XP com dev e arquitetura Java JUGLeader do GoJava - @gojava Palestrante em eventos como TDC e JavaOne LATAM Como churrasco e tomo cerveja a domicílio em todo território nacional
  3. 3. Globalcode – Open4education Atualização para Java 8 Lançado mundialmente dia 25/03/2014, 2+ anos Principais novidades dessa atualização Interfaces Funcionais Lambda Expressions Default methods Api Stream e Collectors Nova java.time Removal of PermGen Melhorias de segurança, Type Annotations, etc... Fonte: http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
  4. 4. Globalcode – Open4education Functional Interfaces Importante para possibilitar as lambda expressions Interfaces com um único método abstrato. Este é um requisito obrigatório. Exemplo: Consumer. Assim no forEach o compilador sabe o método que deverá ser implementado no lambda. Funciona só em interfaces novas do Java 8? Não. Diversas interfaces que já era utilizadas tornaram-se funcionais Para as novas, e as suas implementações, temos a anotação opcional @FunctionalInterface.
  5. 5. Globalcode – Open4education Sort tradicional public static void main(String[] args) { List<Ingresso> ingressos = Arrays.asList( new Ingresso("Festa 1", 100.0), new Ingresso("Festa 2", 150.0), new Ingresso("Festa 3", 200.0)); Collections.sort(inscricoes, new Comparator<Ingresso>() { @Override public int compare(Ingresso o1, Ingresso o2) { return o1.getNome().compareTo(o2.getNome()); } }); }
  6. 6. Globalcode – Open4education Lambda public static void main(String[] args) { List<Ingresso> ingressos = Arrays.asList( new Ingresso("Festa 1", 100.0), new Ingresso("Festa 2", 150.0), new Ingresso("Festa 3", 200.0)); Collections.sort(inscricoes, (o1, o2) -> { return o1.getNome().compareTo(o2.getNome()); }); }
  7. 7. Globalcode – Open4education Lambda public static void main(String[] args) { List<Ingresso> ingressos = Arrays.asList( new Ingresso("Festa 1", 100.0), new Ingresso("Festa 2", 150.0), new Ingresso("Festa 3", 200.0)); Collections.sort(inscricoes, (o1, o2) -> return o1.getNome().compareTo(o2.getNome()); }
  8. 8. Globalcode – Open4education Lambdas public static void main(String[] args) { List<Ingresso> ingressos = Arrays.asList( new Ingresso("Festa 1", 100.0), new Ingresso("Festa 2", 150.0), new Ingresso("Festa 3", 200.0)); ingressos.forEach(ingresso -> System.out.println(ingresso)); }
  9. 9. Globalcode – Open4education Lambdas public static void main(String[] args) { List<Ingresso> ingressos = Arrays.asList( new Ingresso("Festa 1", 100.0), new Ingresso("Festa 2", 150.0), new Ingresso("Festa 3", 200.0)); ingressos.forEach(ingresso -> System.out.println(ingresso)); } A não ainda é muito código?
  10. 10. Globalcode – Open4education Lambdas public static void main(String[] args) { List<Ingresso> ingressos = Arrays.asList( new Ingresso("Festa 1", 100.0), new Ingresso("Festa 2", 150.0), new Ingresso("Festa 3", 200.0)); ingressos.forEach(System.out::println); }
  11. 11. Globalcode – Open4education Default methods Novos métodos, com implementação, adicionados às interfaces Java, como em Collections e Map. Veja por exemplo o forEach: default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } Outros: removeIf, sort, compare, computeIfPresente. Você pode criar default methods em suas interfaces.
  12. 12. Globalcode – Open4education Streams & Collectors Fonte: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.htm Trabalhar com coleções sempre envolve muito código. Em muitas linguagens temos por exemplo um ‘filter’ pra facilitar nossa vida. A lib guava tem a FluentIterable com funcionalidades bastante similares Collectors implementa um conjunto de reduções úteis para trabalhar com coleções como agrupamentos, somatórios e transformações.
  13. 13. Globalcode – Open4education Filtrar da forma tradicional public static void main(String[] args) { List<Ingresso> ingressos = new ArrayList<>(); ingressos.add(new Ingresso("Festa 1", 100.0)); ingressos.add(new Ingresso("Festa 2", 150.0)); ingressos.add(new Ingresso("Festa 3", 180.0)); List<Ingresso> ingressosBaratos = new ArrayList<>(); for(Ingresso ingresso : ingressos) { if(ingresso.getValor() < 120) { ingressosBaratos.add(ingresso); } } }
  14. 14. Globalcode – Open4education Filtrando com Stream e Collectors public static void main(String[] args) { List<Ingresso> ingressos = new ArrayList<>(); ingressos.add(new Ingresso("Festa 1", 100.0)); ingressos.add(new Ingresso("Festa 2", 150.0)); ingressos.add(new Ingresso("Festa 3", 180.0)); List<Ingresso> ingressosBaratos = ingressos.stream() .filter( i -> i.getValor() < 120 ) .collect(Collectors.toList()); }
  15. 15. Globalcode – Open4education Nova api java.time Inspirada na api joda.time Mais facilidade para fazer operações com datas Novas classes LocalDate, LocalDateTime, YearMonth, Year, Month, etc.. Suporte a fuso horário Obter a data de amanhã: LocalDate.now().plusDays(1); Calcular um período entre duas datas, como uma idade: Period periodo = Period.between(dtNascimento, hoje); Fonte: http://blog.caelum.com.br/conheca-a-nova-api-de-datas-do-java-8/
  16. 16. Globalcode – Open4education PermGen space? Não existe mais o Permanent Generation (PermGen) space Metaspace: O novo espaço de memória Não precisa verificar e tunar a memória nunca mais!!! #SQN O metaspace passa a ser limitado pela quantidade de memória fisica na máquina Novo parametro MaxMetaspaceSize para limitar esse uso Basicamente: antes era pouco por default, agora é muito por default Fonte: https://dzone.com/articles/java-8-permgen-metaspace https://www.infoq.com/news/2013/03/java-8-permgen-metaspace
  17. 17. Globalcode – Open4education Mão na massa Código: https://github.com/filipeportes/adopting-java8
  18. 18. Globalcode – Open4education Obrigado! Gojava Slack → https://gojavajug.slack.com Facebook → https://www.facebook.com/gojava Twitter → https://twitter.com/gojava Filipe Twiiter → https://twitter.com/filipeportes Email → omeuefilipe@gmail.com GitHub → https://github.com/filipeportes

×