36
JavaFX 8 JavaFX 8, Collections e Lambdas

JavaFX 8, Collections e Lambdas

Embed Size (px)

DESCRIPTION

JavaFX 8, Collections e Lambdas

Citation preview

JavaFX 8JavaFX 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 Lambdasbutton.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-inPara acelerar o desenvolvimento funcional, Java 8 traz

diversas interfaces funcionais no pacote java.util.function

Predicate: Recebe um objeto de tipo T e retorna booleanFunction: Recebe T e retorna U (transforma)Supplier: Cria objetos do tipo TConsumer: Aplica uma função sobre T E muitas outras...

StreamUm 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çõesAs 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 dadosOs 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 anteriorroute.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 NashornNashorn é 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_antoniogithub.com/jesuinofxapps.blogspot.comaprendendo-javafx.blogspot.com

\o/ OBRIGADO \o/