JavaFX 8, Collections e Lambdas

4.072 visualizações

Publicada em

JavaFX 8, Collections e Lambdas

Publicada em: Tecnologia
1 comentário
4 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
4.072
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2.400
Ações
Compartilhamentos
0
Downloads
50
Comentários
1
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

JavaFX 8, Collections e Lambdas

  1. 1. JavaFX 8 JavaFX 8, Collections e Lambdas
  2. 2. Sobre ● 6 anos de experiência na área ● Trabalha na maior empresa FOSS ● Entusiasta Open Source ● Líder do JUG Vale ● JavaFX desde o início
  3. 3. Objetivo “Introduzir as três grandes melhorias do Java 8: JavaFX, Stream e expressões Lambdas”
  4. 4. Agenda Antigamente ● JavaFX 2 ● Java Funcional ● API Collections Hoje ● Lambdas ● Stream ● JavaFX 8
  5. 5. JavaFX 2 JavaFX 2 é uma biblioteca gráfica com suporte a animações, efeitos, controles de interface, gráficos entre outros...
  6. 6. Demonstração JavaFX 2
  7. 7. Java Funcional “O Java nasceu orientado a objetos, e por toda a parte encontra-se a necessidade de ser funcional”
  8. 8. Situações cotidianas Nem sempre a programação é linear ou imediata: ○ Realizar animação em uma thread separada; ○ Carregar imagem quando passarem o mouse sobre o texto; ○ Alertar usuário quando receber mensagem; ○ “Setar flag” no banco de dados quando terminar a cópia de arquivo ○ ...
  9. 9. Solução: Interfaces Definino ações no Java para quando algo acontecer: ● Crie uma interface; ● Onde deve ser definido sua ação, tenha um atributo do tipo dessa interface ● Chame o método do atributo quando acontecer a ação ● Crie implementações dessa interface para definir a sua ação
  10. 10. Problemas ● Muito código desnecessário ● Necessário conhecer partes da API que não interessam para definir a ação ● Chato...
  11. 11. Exemplo botao.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evento) { // Aqui vai meu código de verdade... } });
  12. 12. Trabalhando com Collections ● A API de Collections do Java não é difícil, mas é tediosa… ● Lidar com listas e transformá-las demanda bastante código; ● Quanto mais código… Mais manutenção e chances de “bugs”.
  13. 13. Exemplo “Pegue uma lista de objetos “Movie”, filtre por genero fornecido, limite os resultados de acordo com um parâmetro, retorne uma lista com os nomes dos filmes no formato JSON”
  14. 14. Quais novidades mais agradaram?
  15. 15. As expressões Lambdas Melhorias na sintaxe na hora de definir implementações das interfaces funcionais*: botao.setOnAction(e ->{ // Minha ação vai aqui } ); * Interfaces com um só método sem corpo(não final)
  16. 16. Mais sobre Lambdas button.setOnAction(e -> algumaCoisa()); new Thread(() -> System.out.println(“Rodando...”)); Array.sort(lista, (n1, n2) -> Integer.compare(n1, n2)); chat.aoReceberMensagem(System.out::println);
  17. 17. Interfaces Funcionais Built-in Para acelerar o desenvolvimento funcional, Java 8 traz diversas interfaces funcionais no pacote java.util.function Predicate: Recebe um objeto de tipo T e retorna boolean Function: Recebe T e retorna U (transforma) Supplier: Cria objetos do tipo T Consumer: Aplica uma função sobre T E muitas outras...
  18. 18. Stream Um fluxo de objetos de tipo T: o1 -> o2 -> o3 -> o4 -> o5 -> o6 -> o7 …. Podemos aplicar funções sobre esses dados: funções que fecham o stream ou não, possibilitando encadear funções...
  19. 19. Stream e suas funções As funções aplicadas ao fluxo de dados são intimamentes ligadas às funções disponíveis no Java 8: Métodos do Stream: map(Function) filter(Predicate) peek(Consumer) forEach(Consumer) generate(Supplier)
  20. 20. Agrupando dados Os dados do Stream podem ser agrupados através do método collect Podemos agrupar os objetos do Stream para um String, para um map, para um Set. Muitos collectors já estão prontos na classe java.util. stream.Collectors
  21. 21. Stream As Collections ganham um novo método chamado stream() que retorna um “stream” dos dados naquela collection (método com implementação default) ….
  22. 22. Collections + Stream + Lamba + Interfaces funcionais
  23. 23. Refazendo o exemplo anterior route.get("/movies/search/genre/:genre/:limit", req -> { Pattern pattern = compile(req.params().get("genre").toLowerCase()); req.response().end( movies.stream() .filter(movie -> pattern.matcher(movie.genre).find()) .map(Movie::toString) .limit(parseInt(req.params().get("limit"))) .collect(joining(",", "[", "]"))); }); https://github.com/devoxx2014- webperf/movie_buddy/blob/master/src/com/github/forax/moviebuddy/Server.java
  24. 24. Dica: Explore Veja códigos escritos na forma tradicional e reescreva com Lambdas e aprofunde nos collectors e funções já disponíveis. Traga programação funcional para sua vida OO
  25. 25. JavaFX 8 JavaFX é parte do Java 8 Não é necessário uma API Externa para usar JavaFX, só chegar e compilar: $ javac SuperApp.java $ java SuperApp
  26. 26. Demo JavaFX 8
  27. 27. JavaFX 8 e Lambda Muitas classes do JavaFX já são compatíveis com Lambdas: ● Tratamento de Eventos ● Cell Factories ● Listeners
  28. 28. JavaFX e Nashorn Nashorn é a nova Engine Javascript do Java e é possível escrever aplicações em JavaFX usando JavaScript! ./jjs -fx SeuScript.js
  29. 29. Para ver mais SentimentsApp: Lambdas, collection
  30. 30. MAS A GRANDE NOVIDADE DO JAVA 8 VOCÊ NÃO ESPERAVA!11!!!!11!!!!
  31. 31. Melhorias na classe String Método join na String: String.join(“ tem ”, “No céu”, “pão?”) No céu tem pão?
  32. 32. E acabou...
  33. 33. Dúvidas? @William_antonio github.com/jesuino fxapps.blogspot.com aprendendo-javafx.blogspot.com o/ OBRIGADO o/

×