SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
JavaFX 8
JavaFX 8, Collections e Lambdas
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
Objetivo
“Introduzir as três grandes melhorias do
Java 8: JavaFX, Stream e expressões
Lambdas”
Agenda
Antigamente
● JavaFX 2
● Java Funcional
● API Collections
Hoje
● Lambdas
● Stream
● JavaFX 8
JavaFX 2
JavaFX 2 é uma biblioteca gráfica com
suporte a animações, efeitos, controles de
interface, gráficos entre outros...
Demonstração JavaFX 2
Java Funcional
“O Java nasceu orientado a objetos, e por
toda a parte encontra-se a necessidade de
ser funcional”
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
○ ...
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
Problemas
● Muito código desnecessário
● Necessário conhecer partes da API que não
interessam para definir a ação
● Chato...
Exemplo
botao.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent evento) {
// Aqui vai meu código de verdade...
}
});
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”.
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”
Quais novidades mais agradaram?
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)
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);
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...
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...
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)
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
Stream
As Collections ganham um novo método
chamado stream() que retorna um “stream”
dos dados naquela collection (método com
implementação default)
….
Collections + Stream + Lamba +
Interfaces funcionais
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
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
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
Demo JavaFX 8
JavaFX 8 e Lambda
Muitas classes do JavaFX já são compatíveis
com Lambdas:
● Tratamento de Eventos
● Cell Factories
● Listeners
JavaFX e Nashorn
Nashorn é a nova Engine Javascript do Java e é
possível escrever aplicações em JavaFX usando
JavaScript!
./jjs -fx SeuScript.js
Para ver mais
SentimentsApp: Lambdas, collection
MAS A GRANDE NOVIDADE DO JAVA 8
VOCÊ NÃO ESPERAVA!11!!!!11!!!!
Melhorias na classe String
Método join na String:
String.join(“ tem ”, “No céu”, “pão?”)
No céu tem pão?
E acabou...
Dúvidas?
@William_antonio
github.com/jesuino
fxapps.blogspot.com
aprendendo-javafx.blogspot.com
o/ OBRIGADO o/

Mais conteúdo relacionado

Mais procurados

Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutosBruno Oliveira
 
JavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavaJavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavajesuinoPower
 
Chega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidChega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidBruno Oliveira
 
JavaFX - Uma visão Geral
JavaFX - Uma visão GeralJavaFX - Uma visão Geral
JavaFX - Uma visão GeralEder Nogueira
 
Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2Claudiney Marques
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOakjesuinoPower
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Raphael Marques
 
Conectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SPConectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SPjesuinoPower
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 

Mais procurados (20)

Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutos
 
JavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavaJavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma Java
 
Chega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidChega de lendas! JavaFX em Android
Chega de lendas! JavaFX em Android
 
JavaFX - Uma visão Geral
JavaFX - Uma visão GeralJavaFX - Uma visão Geral
JavaFX - Uma visão Geral
 
Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2
 
Javafx
JavafxJavafx
Javafx
 
Jclouds jug vale
Jclouds jug valeJclouds jug vale
Jclouds jug vale
 
Ria e Java FX
Ria e Java FXRia e Java FX
Ria e Java FX
 
Introdução ao LiveOak
Introdução ao LiveOakIntrodução ao LiveOak
Introdução ao LiveOak
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Groovy stack
Groovy stackGroovy stack
Groovy stack
 
Jugvale
JugvaleJugvale
Jugvale
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
JEE nas nuvens: uma introdução ao openshift
JEE nas nuvens:  uma introdução ao openshiftJEE nas nuvens:  uma introdução ao openshift
JEE nas nuvens: uma introdução ao openshift
 
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
Aplicações desktop (GUI) e aplicações ricas para internet (RIA)
 
Conectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SPConectando jBPM com o mundo - TDC 2014 SP
Conectando jBPM com o mundo - TDC 2014 SP
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 

Semelhante a JavaFX 8, Collections e Lambdas

Java 8 para o dia a dia
Java 8 para o dia a diaJava 8 para o dia a dia
Java 8 para o dia a diaRicardo Faria
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Claudio Martins
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma JavaFilipe Portes
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdfgabriel-colman
 
PHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel CollectionsPHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel CollectionsAryel Tupinambá
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010lucashungaro
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaRegis Magalhães
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 

Semelhante a JavaFX 8, Collections e Lambdas (20)

Java 8 para o dia a dia
Java 8 para o dia a diaJava 8 para o dia a dia
Java 8 para o dia a dia
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma Java
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf
 
Java 01
Java 01Java 01
Java 01
 
PHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel CollectionsPHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel Collections
 
Java8
Java8Java8
Java8
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Java 8 e futuro
Java 8 e futuroJava 8 e futuro
Java 8 e futuro
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Tag Libraries e JSTL
Tag Libraries e JSTLTag Libraries e JSTL
Tag Libraries e JSTL
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 

JavaFX 8, Collections e Lambdas

  • 1. JavaFX 8 JavaFX 8, Collections e Lambdas
  • 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. Objetivo “Introduzir as três grandes melhorias do Java 8: JavaFX, Stream e expressões Lambdas”
  • 4. Agenda Antigamente ● JavaFX 2 ● Java Funcional ● API Collections Hoje ● Lambdas ● Stream ● JavaFX 8
  • 5.
  • 6. JavaFX 2 JavaFX 2 é uma biblioteca gráfica com suporte a animações, efeitos, controles de interface, gráficos entre outros...
  • 8. Java Funcional “O Java nasceu orientado a objetos, e por toda a parte encontra-se a necessidade de ser funcional”
  • 9. 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 ○ ...
  • 10. 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
  • 11. Problemas ● Muito código desnecessário ● Necessário conhecer partes da API que não interessam para definir a ação ● Chato...
  • 12. Exemplo botao.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent evento) { // Aqui vai meu código de verdade... } });
  • 13. 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”.
  • 14. 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”
  • 15.
  • 16.
  • 17. Quais novidades mais agradaram?
  • 18. 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)
  • 19. 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);
  • 20. 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...
  • 21. 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...
  • 22. 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)
  • 23. 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
  • 24. Stream As Collections ganham um novo método chamado stream() que retorna um “stream” dos dados naquela collection (método com implementação default) ….
  • 25. Collections + Stream + Lamba + Interfaces funcionais
  • 26. 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
  • 27. 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
  • 28. 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
  • 30. JavaFX 8 e Lambda Muitas classes do JavaFX já são compatíveis com Lambdas: ● Tratamento de Eventos ● Cell Factories ● Listeners
  • 31. JavaFX e Nashorn Nashorn é a nova Engine Javascript do Java e é possível escrever aplicações em JavaFX usando JavaScript! ./jjs -fx SeuScript.js
  • 32. Para ver mais SentimentsApp: Lambdas, collection
  • 33. MAS A GRANDE NOVIDADE DO JAVA 8 VOCÊ NÃO ESPERAVA!11!!!!11!!!!
  • 34. Melhorias na classe String Método join na String: String.join(“ tem ”, “No céu”, “pão?”) No céu tem pão?