SlideShare uma empresa Scribd logo
1 de 52
Java8
Se você não conhece ainda, corra! você está ficando para trás
Java Last Versions
14/05/2016 Java8 2
Generics
Metadata(Anotation)
Autoboxing
Enumerations
Varargs
Static imports
Java 5 going end of life
in October 2009
Java 6 reached
the end of its supported
life in February 2013
April 2015 when the product
reached the end of
its support lifecycle
Dynamic languages
Strings in switch
try-statement
Diamond operator <>
Catching multiple exception
New file I/O library
JDBC 4.0 support
Improved Web Service
support
synchronization and
compiler performance
optimizations
Tiger Mustang Dolphin “Spider”
Java Versions
• Java 9 scheduled for September 2016
• Modularization of the JDK under Project Jigsaw
• Money and Currency API
14/05/2016 Java8 3
Java8
• Lambda
• “Na lógica matemática e na ciência da computação, cálculo
lambda é um sistema formal que estuda funções recursivas
computáveis, no que se refere a teoria da computabilidade, e
fenômenos relacionados, como variáveis ligadas e substituição.
Sua principal característica são as entidades que podem ser
utilizadas como argumentos e retornadas como valores de
outras funções.” [Wikipédia]
14/05/2016 Java8 4
Java8
• Lambda
• Lambda Expressions foi a maneira escolhida para que a linguagem
Java consiga “simular” a programação funcional.
• “Em ciência da computação, programação funcional é um
paradigma de programação que trata a computação como uma
avaliação de funções matemáticas e que evita estados ou dados
mutáveis. Ela enfatiza a aplicação de funções, em contraste da
programação imperativa, que enfatiza mudanças no estado do
programa.”[Wikipédia]
14/05/2016 Java8 5
Java8
• Lambda
• Mas enfim o que é Lamdba Expressino na prática?
• São expressões da Forma:
Entrada -> Saída
( ) -> { }
14/05/2016 Java8 6
Java8
• Lambda
(int x, int y) -> {return x + y;};
(int x) -> {return x + x;};
(x) -> {return x + x};
(x) -> x + x;
x -> x + x;
14/05/2016 Java8 7
Java8
• Lambda
Onde e como usar Lambda?
Primeiro precisamos entender o que é uma
interface funcional
14/05/2016 Java8 8
Java8
• Interface Funcional
• Interface que só tem um método abstrato
• @FuncitionalInterface não é obrigatório, serve para o compilador
alertar se você tentar fazer algo que não é permitido, como
adicionar um novo método abstrato
14/05/2016 Java8 9
Java8
• Interface Funcional
• Podemos ter métodos concretos em interfaces a partir do Java 8.
Basta utilizar o modificador default. Eles serão "herdados" por
todos que implementarem essa interface. Esse recurso, chamado
default method, permite evoluir uma interface sem quebrar
compatibilidade.
14/05/2016 Java8 10
Java8
• Interface Funcional
• Por que interface funcional é importante para entender lambda?
• Interface funcional lembra função
• Função lembra entrada -> saída
• entrada -> saída lembra lambda
• Onde existir uma interface funcional é possível usar uma
expressão lambda!
• Onde existir uma função é possível chamar essa função a partir de
expressão lambda!
14/05/2016 Java8 11
Java8
• Lambda +Interface Funcional
14/05/2016 Java8 12
Como eu executo esse classe?
Java8
• Lambda +Interface Funcional
• Até o Java 7
14/05/2016 Java8 13
Java8
• Lambda +Interface Funcional
• Até o Java 7 (simplificado)
14/05/2016 Java8 14
Como eu posso cria um objeto de uma interface?
Você não cria, o compilador gera para você uma classe anônima que
implementa a interface MyInterface, e passa essa classe ao método
Diminui a quantidade de código que você precisa criar
Java8
• Lambda +Interface Funcional
• Agora com Java 8 (simplificado ainda mais)
14/05/2016 Java8 15
Eu não disse que onde existe uma interface funciona eu posso passar
uma expressão lambda!
Java8
• Lambda +Interface Funcional
• Agora com Java 8 (simplificado ainda mais)
14/05/2016 Java8 16
• O compilador cria uma classe anônima que implementa a interface
MyInterface
• Como essa interface é funcional, só tem um método void action(), o
compilador sabe que o código definido aqui ( ) -> são os parâmetros
desse método, e o código definido -> { } é o corpo desse método.
Então você não precisa mais informar isso, o java gera para você.
O que está ocorrendo aqui?
Java8
• Lambda +Interface Funcional
• Agora com Java 8 (simplificado ainda mais)
14/05/2016 Java8 17
• Ele pega o método concreto void action() gerado na classe anônima e
passa como parâmetro o que você colocou antes do “->” e coloca no
corpo do método que você colocar depois de “->”
O que está ocorrendo aqui?
Java8
• Interface Funcional
• Essa é a “simulação” que o Java 8 faz para incorporar o conceito
de programação funcional
• No final das contas, a JVM continua recebendo um objeto que
implementa uma interface e está chamando o método único dessa
interface, que foi implementado pelo objeto
• Para nós programadores, podemos abstrai esse conceito, dizendo
que: “estamos passando uma função para ser executada”
14/05/2016 Java8 18
Java8
• Interface Funcional + Lambda
• Todo o código pode ser simplificado para 1 linha
• Diminui drasticamente a quantidade de código que você precisa
criar
• Para quem não gosta de escrever código, expressões lambda são
um prato cheio
• Sempre que você tiver uma classe anônima que estiver
implementando uma interface funcional, você pode substituir por
uma expressão lambda
• Lambda em Java = simplesmente uma outra forma de instanciar
uma classe anônima
14/05/2016 Java8 19
Java8
• Interface Funcional + Lambda
• Inferência de Tipos
• Como só tem 1 método, o compilador consegue saber o tipo dos dados,
não é preciso indicar
14/05/2016 Java8 20
Método Lambda Lambda Simplificado
public int method (int x) (x) ->
{ return x*10;}
(x) -> x*10;
public int method (String x) (x) ->
{ return x.length();}
(x) -> x.length();
public void method
(List<String> x, String y)
(x, y) ->
{ x.add(y);}
(x, y) -> x.add(y);
Java8
• Interface Funcional + Lambda
14/05/2016 Java8 21
Java8
• Interface Funcional + Lambda
14/05/2016 Java8 22
Java8
• Method Reference
Class::staticMethod
Class::method
Class::new
14/05/2016 Java8 23
Java8
• Method Reference
14/05/2016 Java8 24
Tenho uma interface funcional:
E um método que recebe essa função:
Java8
• Method Reference
14/05/2016 Java8 25
Usando o método com classe anônima:
Usando o método com lambda:
Se a única coisa que a lambda faz é retornar um
método de um objeto, eu posso reescrever isso com method reference:
Java8
• Method Reference
14/05/2016 Java8 26
Lambda Method Reference
p -> p.getName(); Person::getName;
(x) -> String.valueOf(x); String::valueOf;
() -> new ArrayList(); ArrayList::new;
Java8
• Stream API
• API para realizar operações em sequencias sobre dados
• Para fazer transformações comuns em nossas coleções,
contamos agora com uma nova API, o Stream
• Para criar um Stream com os elementos de nossa lista só
precisamos chamar o método defaut stream() adicionado a
interface Collection
14/05/2016 Java8 27
Java8
• Stream API
14/05/2016 Java8 28
Principais Métodos da API Stream
mapTo Executa uma transformação 1 para 1
filter Filtra objetos do stream
forEach Executa uma ação em cada elemento do stream
collect Encerra o stream e retorna alguma coisa, dependendo do
que você está passando
Java8
• Pacote JAVA.UTIL.FUNCTIONS
• Introduziu um conjunto de interfaces funcionais para a gente
tirar proveito e poder usar as expressões lambda
1. Functions<T, R>
2. Predicate<T>
3. Consumer<T>
4. Supplier<T>
5. BinaryOperator<T>
14/05/2016 Java8 29
Java8
• Pacote JAVA.UTIL.FUNCTIONS
• Introduziu um conjunto de interfaces funcionais para a gente tirar
proveito e poder usar as expressões lambda
1. Functions<T, R>
A interface Function serve para fazer transformações.
Na opção abaixo, ela está recebendo uma Pessoa e retornado uma
string (o nome da pessoa)
14/05/2016 Java8 30
Java8
• Pacote JAVA.UTIL.FUNCTIONS
• Introduziu um conjunto de interfaces funcionais para a gente tirar
proveito e poder usar as expressões lambda
1. Predicate<T>
Predicado, recebe um objeto e retorna um boolean
14/05/2016 Java8 31
Java8
• Pacote JAVA.UTIL.FUNCTIONS
• Introduziu um conjunto de interfaces funcionais para a gente tirar
proveito e poder usar as expressões lambda
1. Consumer<T>
Um consumidor: Recebe um objeto e não retorna nada.
14/05/2016 Java8 32
Java8
• Pacote JAVA.UTIL.FUNCTIONS
• Introduziu um conjunto de interfaces funcionais para a gente tirar
proveito e poder usar as expressões lambda
1. Supplier<T>
Um produtor : Recebe nada e retorna um objeto
14/05/2016 Java8 33
Java8
• Pacote JAVA.UTIL.FUNCTIONS
• Introduziu um conjunto de interfaces funcionais para a gente tirar
proveito e poder usar as expressões lambda
1. BinaryOperator<T>
Recebe 2 objetos e retorna 1
14/05/2016 Java8 34
Java8
Lambda + Stream + Functions
14/05/2016 Java8 35
Java8
• Lambda + Stream + Functions
1. 1 fonte de dados
2. Obtenha um Stream
3. Aplique 1 ou mais operações Intermediárias (que retornam outro
stream)
4. Aplique uma operação terminal
14/05/2016 Java8 36
Java8
• Lambda + Stream + Functions
14/05/2016 Java8 37
Imprimir nomes de pessoas com tamanho menor que 6
Java 8:
Até o Java 7:
Fonte de dados:
Java8
• Lambda + Stream + Functions
14/05/2016 Java8 38
Java 8: Predicado, recebe um objeto e retorna um boolean
Um consumidor: Recebe um objeto e não retorna nada.
Java8
• Lambda + Stream + Functions
14/05/2016 Java8 39
Java 8:
Ou Resumidamente
Ou Ainda
Java8
• Lambda + Stream + Functions
14/05/2016 Java8 40
Java 8:
Predicado, recebe um objeto e retorna um boolean
Todo método mapTo é um transformação
recebe o nome n que é uma String e retorna o tamanho
Depois soma tudo.
sum é um "método terminal"
Estou filtrando os nomes que começam com “A”, convertendo os nomes que
foram filtrados anteriormente em um lista de inteiros que corresponde aos
respectivos tamanhos, depois retornando a soma desses tamanhos
Java8
• Lambda + Stream + Functions
14/05/2016 Java8 41
Antes do Java 8:
Java8
• Exercício Proposto
14/05/2016 Java8 42
Crie uma lista de alunos onde cada aluno possua matrícula, nome e nota.
Percorra essa lista de alunos e imprima a matrícula e o nome dos alunos
com nota >= 7 usando os recursos do Java 8: lambda + stream + functions
Java8
• API JAVA.TIME
• Vários Conceitos novos, para cada um tipo de data
14/05/2016 Java8 43
LocalTime Tempo 12:00:00
LocalDate Data 2015-12-12
LocalDateTime Data e tempo 2015-12-12T12:00:00
YearMonth Ano e Mês 2015-12
MonthDay Mês e dia 12-03
Instant representa um instante de
tempo
2015-12-12T12:00:00.000Z
Duration Intervalo de tempo em horas 30.8 seconds
Period Intervalo de tempo em dias 1 year, 2 months, and 3 days
Java8
• API JAVA.TIME
• Métodos now() ou of(...)
14/05/2016 Java8 44
Java8
• API JAVA.TIME
14/05/2016 Java8 45
É possível encadear várias chamas. A API é imutável, o objeto original
não muda de valor, novos objeto são criados e retornados
TemporalAdjuster: Classes que serve para fazer vários cálculos de forma
simples, por exemplo, calcular o próximo domingo:
Java8
• API JAVA.TIME
14/05/2016 Java8 46
Essa classe serve para medir um intervalo de tempo
em termos de nanossegundos.
Você pode obter essa quantidade
de tempo em diversas unidades chamando métodos como toNanos,
toMillis, getSeconds, etc.
Java8
• API JAVA.OI / NIO
14/05/2016 Java8 47
Adição da API stream, você consegue abrir um arquivo
e jogar as linhas em um stream. E a partir desse ponto usar todos os
recursos de stream para processar o arquivo
Java8
• TYPE ANNOTATION
14/05/2016 Java8 48
Capacidade de colocar anotação em qualquer declaração de tipo
Java8
• CONCURRENCY API
14/05/2016 Java8 49
Um das características das linguagens funcionais: evitam estados
mutáveis e facilitam a criação de aplicações concorrentes
Adição da classe CompletableFuture<T>
1. Fornece métodos não-bloqueantes através de callbacks
2. Suporta lambdas
3. Quantidade bem maior de funcionalidades em relação a Future
4. Podemos fazer encadeamento de métodos e composição.
Java8
• CONCURRENCY API
14/05/2016 Java8 50
para executar um lambda do tipo Supplier
deseja executar uma operação em outro CompletableFuture
aplica uma transformação simples através de uma função lambda
thread lance uma exceção, para manipular essa situação
Essa função lambda é o callback que será chamado quando
CompletableFuture terminar seu processamento
Java8
• Pictures taken from
• https://pt.wikibooks.org/wiki/Programar_em_C/Makefiles
• https://solidsoft.wordpress.com/category/tricks-tips/
• http://pt.slideshare.net/tomek_k/convention-over-configuration-
maven-3-polyglot-maven-gradle-and-ant
• https://kamaondev.wordpress.com/2013/09/16/porque-voce-deve-
trocar-o-maven-pelo-gradle/
14/05/2016 Java8 51
14/05/2016 Java8 52

Mais conteúdo relacionado

Mais procurados

Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - KotlinAndré Justi
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: ThreadsAlex Camargo
 
Laboratório de Programação II: Uso do ponteiro void *
Laboratório de Programação II: Uso do ponteiro void *Laboratório de Programação II: Uso do ponteiro void *
Laboratório de Programação II: Uso do ponteiro void *Alex Camargo
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 

Mais procurados (20)

Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - Kotlin
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Java VS Kotlin
Java VS KotlinJava VS Kotlin
Java VS Kotlin
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
JAVA - Introdução
JAVA - IntroduçãoJAVA - Introdução
JAVA - Introdução
 
Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
JSPs Etiquetas
JSPs EtiquetasJSPs Etiquetas
JSPs Etiquetas
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Laboratório de Programação II: Threads
Laboratório de Programação II: ThreadsLaboratório de Programação II: Threads
Laboratório de Programação II: Threads
 
Programação aula001
Programação aula001Programação aula001
Programação aula001
 
Cap10
Cap10Cap10
Cap10
 
Laboratório de Programação II: Uso do ponteiro void *
Laboratório de Programação II: Uso do ponteiro void *Laboratório de Programação II: Uso do ponteiro void *
Laboratório de Programação II: Uso do ponteiro void *
 
7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
es6
es6es6
es6
 

Destaque

Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao FlywayJadson Santos
 
Usando hiberante de forma otimizada
Usando hiberante de forma otimizadaUsando hiberante de forma otimizada
Usando hiberante de forma otimizadaJadson Santos
 
ICEIS 2013 Presentation
ICEIS 2013 PresentationICEIS 2013 Presentation
ICEIS 2013 PresentationJadson Santos
 
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...Jadson Santos
 

Destaque (8)

Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Git
GitGit
Git
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
Introdução ao Flyway
Introdução ao FlywayIntrodução ao Flyway
Introdução ao Flyway
 
Gradle
GradleGradle
Gradle
 
Usando hiberante de forma otimizada
Usando hiberante de forma otimizadaUsando hiberante de forma otimizada
Usando hiberante de forma otimizada
 
ICEIS 2013 Presentation
ICEIS 2013 PresentationICEIS 2013 Presentation
ICEIS 2013 Presentation
 
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
 

Semelhante a Java8

JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasjesuinoPower
 
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
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetosFer Nando
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetosFabiano Rodrigues
 
Java 8 e lambdas (palestra Techday 2.0)
Java 8 e lambdas (palestra Techday 2.0)Java 8 e lambdas (palestra Techday 2.0)
Java 8 e lambdas (palestra Techday 2.0)Douglas Frari
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixCris Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixCris Fidelix
 
Java 8 - Entendendo streams, lambdas e etc.
Java 8 - Entendendo streams, lambdas e etc.Java 8 - Entendendo streams, lambdas e etc.
Java 8 - Entendendo streams, lambdas e etc.Marcelo Li Koga
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)Bruno Soares
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
TDC2016SP - Aperfeiçoando seu código com Stream
TDC2016SP - Aperfeiçoando seu código com StreamTDC2016SP - Aperfeiçoando seu código com Stream
TDC2016SP - Aperfeiçoando seu código com Streamtdc-globalcode
 

Semelhante a Java8 (20)

Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e Lambdas
 
Usando Java 8 no Android
Usando Java 8 no AndroidUsando Java 8 no Android
Usando Java 8 no Android
 
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
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
 
Java 8 e lambdas (palestra Techday 2.0)
Java 8 e lambdas (palestra Techday 2.0)Java 8 e lambdas (palestra Techday 2.0)
Java 8 e lambdas (palestra Techday 2.0)
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Linguagem Java, fundamentos da linguagem Java
Linguagem Java, fundamentos da linguagem JavaLinguagem Java, fundamentos da linguagem Java
Linguagem Java, fundamentos da linguagem Java
 
Aula05-JavaScript
Aula05-JavaScriptAula05-JavaScript
Aula05-JavaScript
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane Fidelix
 
Java 8 - Entendendo streams, lambdas e etc.
Java 8 - Entendendo streams, lambdas e etc.Java 8 - Entendendo streams, lambdas e etc.
Java 8 - Entendendo streams, lambdas e etc.
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
TDC2016SP - Aperfeiçoando seu código com Stream
TDC2016SP - Aperfeiçoando seu código com StreamTDC2016SP - Aperfeiçoando seu código com Stream
TDC2016SP - Aperfeiçoando seu código com Stream
 
Computacao distribuida com rmi
Computacao distribuida com rmiComputacao distribuida com rmi
Computacao distribuida com rmi
 

Mais de Jadson Santos

A Deep Dive into Continuous Integration Monitoring Practices
A Deep Dive into Continuous Integration Monitoring PracticesA Deep Dive into Continuous Integration Monitoring Practices
A Deep Dive into Continuous Integration Monitoring PracticesJadson Santos
 
Containerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and JavaContainerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and JavaJadson Santos
 
Continuous Delivery with Jenkins
Continuous Delivery with JenkinsContinuous Delivery with Jenkins
Continuous Delivery with JenkinsJadson Santos
 
Cd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuCd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuJadson Santos
 
Jenkins Continuous Delivery
Jenkins Continuous DeliveryJenkins Continuous Delivery
Jenkins Continuous DeliveryJadson Santos
 
Introduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectIntroduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectJadson Santos
 
Hazelcast Distributed Lock
Hazelcast Distributed LockHazelcast Distributed Lock
Hazelcast Distributed LockJadson Santos
 
Usando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSFUsando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSFJadson Santos
 
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...Jadson Santos
 

Mais de Jadson Santos (11)

A Deep Dive into Continuous Integration Monitoring Practices
A Deep Dive into Continuous Integration Monitoring PracticesA Deep Dive into Continuous Integration Monitoring Practices
A Deep Dive into Continuous Integration Monitoring Practices
 
Containerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and JavaContainerizing a Web Application with Vue.js and Java
Containerizing a Web Application with Vue.js and Java
 
Continuous Delivery with Jenkins
Continuous Delivery with JenkinsContinuous Delivery with Jenkins
Continuous Delivery with Jenkins
 
Cd with Github Travis CI and Heroku
Cd with Github Travis CI and HerokuCd with Github Travis CI and Heroku
Cd with Github Travis CI and Heroku
 
Vue.js
Vue.jsVue.js
Vue.js
 
Jenkins Continuous Delivery
Jenkins Continuous DeliveryJenkins Continuous Delivery
Jenkins Continuous Delivery
 
Introduction to angular with a simple but complete project
Introduction to angular with a simple but complete projectIntroduction to angular with a simple but complete project
Introduction to angular with a simple but complete project
 
Hazelcast Distributed Lock
Hazelcast Distributed LockHazelcast Distributed Lock
Hazelcast Distributed Lock
 
Usando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSFUsando JMeter para testar sua aplicação JSF
Usando JMeter para testar sua aplicação JSF
 
Enums
EnumsEnums
Enums
 
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
Conditional Execution - A Pattern for the Implementation of Fine-Grained Vari...
 

Java8

  • 1. Java8 Se você não conhece ainda, corra! você está ficando para trás
  • 2. Java Last Versions 14/05/2016 Java8 2 Generics Metadata(Anotation) Autoboxing Enumerations Varargs Static imports Java 5 going end of life in October 2009 Java 6 reached the end of its supported life in February 2013 April 2015 when the product reached the end of its support lifecycle Dynamic languages Strings in switch try-statement Diamond operator <> Catching multiple exception New file I/O library JDBC 4.0 support Improved Web Service support synchronization and compiler performance optimizations Tiger Mustang Dolphin “Spider”
  • 3. Java Versions • Java 9 scheduled for September 2016 • Modularization of the JDK under Project Jigsaw • Money and Currency API 14/05/2016 Java8 3
  • 4. Java8 • Lambda • “Na lógica matemática e na ciência da computação, cálculo lambda é um sistema formal que estuda funções recursivas computáveis, no que se refere a teoria da computabilidade, e fenômenos relacionados, como variáveis ligadas e substituição. Sua principal característica são as entidades que podem ser utilizadas como argumentos e retornadas como valores de outras funções.” [Wikipédia] 14/05/2016 Java8 4
  • 5. Java8 • Lambda • Lambda Expressions foi a maneira escolhida para que a linguagem Java consiga “simular” a programação funcional. • “Em ciência da computação, programação funcional é um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa.”[Wikipédia] 14/05/2016 Java8 5
  • 6. Java8 • Lambda • Mas enfim o que é Lamdba Expressino na prática? • São expressões da Forma: Entrada -> Saída ( ) -> { } 14/05/2016 Java8 6
  • 7. Java8 • Lambda (int x, int y) -> {return x + y;}; (int x) -> {return x + x;}; (x) -> {return x + x}; (x) -> x + x; x -> x + x; 14/05/2016 Java8 7
  • 8. Java8 • Lambda Onde e como usar Lambda? Primeiro precisamos entender o que é uma interface funcional 14/05/2016 Java8 8
  • 9. Java8 • Interface Funcional • Interface que só tem um método abstrato • @FuncitionalInterface não é obrigatório, serve para o compilador alertar se você tentar fazer algo que não é permitido, como adicionar um novo método abstrato 14/05/2016 Java8 9
  • 10. Java8 • Interface Funcional • Podemos ter métodos concretos em interfaces a partir do Java 8. Basta utilizar o modificador default. Eles serão "herdados" por todos que implementarem essa interface. Esse recurso, chamado default method, permite evoluir uma interface sem quebrar compatibilidade. 14/05/2016 Java8 10
  • 11. Java8 • Interface Funcional • Por que interface funcional é importante para entender lambda? • Interface funcional lembra função • Função lembra entrada -> saída • entrada -> saída lembra lambda • Onde existir uma interface funcional é possível usar uma expressão lambda! • Onde existir uma função é possível chamar essa função a partir de expressão lambda! 14/05/2016 Java8 11
  • 12. Java8 • Lambda +Interface Funcional 14/05/2016 Java8 12 Como eu executo esse classe?
  • 13. Java8 • Lambda +Interface Funcional • Até o Java 7 14/05/2016 Java8 13
  • 14. Java8 • Lambda +Interface Funcional • Até o Java 7 (simplificado) 14/05/2016 Java8 14 Como eu posso cria um objeto de uma interface? Você não cria, o compilador gera para você uma classe anônima que implementa a interface MyInterface, e passa essa classe ao método Diminui a quantidade de código que você precisa criar
  • 15. Java8 • Lambda +Interface Funcional • Agora com Java 8 (simplificado ainda mais) 14/05/2016 Java8 15 Eu não disse que onde existe uma interface funciona eu posso passar uma expressão lambda!
  • 16. Java8 • Lambda +Interface Funcional • Agora com Java 8 (simplificado ainda mais) 14/05/2016 Java8 16 • O compilador cria uma classe anônima que implementa a interface MyInterface • Como essa interface é funcional, só tem um método void action(), o compilador sabe que o código definido aqui ( ) -> são os parâmetros desse método, e o código definido -> { } é o corpo desse método. Então você não precisa mais informar isso, o java gera para você. O que está ocorrendo aqui?
  • 17. Java8 • Lambda +Interface Funcional • Agora com Java 8 (simplificado ainda mais) 14/05/2016 Java8 17 • Ele pega o método concreto void action() gerado na classe anônima e passa como parâmetro o que você colocou antes do “->” e coloca no corpo do método que você colocar depois de “->” O que está ocorrendo aqui?
  • 18. Java8 • Interface Funcional • Essa é a “simulação” que o Java 8 faz para incorporar o conceito de programação funcional • No final das contas, a JVM continua recebendo um objeto que implementa uma interface e está chamando o método único dessa interface, que foi implementado pelo objeto • Para nós programadores, podemos abstrai esse conceito, dizendo que: “estamos passando uma função para ser executada” 14/05/2016 Java8 18
  • 19. Java8 • Interface Funcional + Lambda • Todo o código pode ser simplificado para 1 linha • Diminui drasticamente a quantidade de código que você precisa criar • Para quem não gosta de escrever código, expressões lambda são um prato cheio • Sempre que você tiver uma classe anônima que estiver implementando uma interface funcional, você pode substituir por uma expressão lambda • Lambda em Java = simplesmente uma outra forma de instanciar uma classe anônima 14/05/2016 Java8 19
  • 20. Java8 • Interface Funcional + Lambda • Inferência de Tipos • Como só tem 1 método, o compilador consegue saber o tipo dos dados, não é preciso indicar 14/05/2016 Java8 20 Método Lambda Lambda Simplificado public int method (int x) (x) -> { return x*10;} (x) -> x*10; public int method (String x) (x) -> { return x.length();} (x) -> x.length(); public void method (List<String> x, String y) (x, y) -> { x.add(y);} (x, y) -> x.add(y);
  • 21. Java8 • Interface Funcional + Lambda 14/05/2016 Java8 21
  • 22. Java8 • Interface Funcional + Lambda 14/05/2016 Java8 22
  • 24. Java8 • Method Reference 14/05/2016 Java8 24 Tenho uma interface funcional: E um método que recebe essa função:
  • 25. Java8 • Method Reference 14/05/2016 Java8 25 Usando o método com classe anônima: Usando o método com lambda: Se a única coisa que a lambda faz é retornar um método de um objeto, eu posso reescrever isso com method reference:
  • 26. Java8 • Method Reference 14/05/2016 Java8 26 Lambda Method Reference p -> p.getName(); Person::getName; (x) -> String.valueOf(x); String::valueOf; () -> new ArrayList(); ArrayList::new;
  • 27. Java8 • Stream API • API para realizar operações em sequencias sobre dados • Para fazer transformações comuns em nossas coleções, contamos agora com uma nova API, o Stream • Para criar um Stream com os elementos de nossa lista só precisamos chamar o método defaut stream() adicionado a interface Collection 14/05/2016 Java8 27
  • 28. Java8 • Stream API 14/05/2016 Java8 28 Principais Métodos da API Stream mapTo Executa uma transformação 1 para 1 filter Filtra objetos do stream forEach Executa uma ação em cada elemento do stream collect Encerra o stream e retorna alguma coisa, dependendo do que você está passando
  • 29. Java8 • Pacote JAVA.UTIL.FUNCTIONS • Introduziu um conjunto de interfaces funcionais para a gente tirar proveito e poder usar as expressões lambda 1. Functions<T, R> 2. Predicate<T> 3. Consumer<T> 4. Supplier<T> 5. BinaryOperator<T> 14/05/2016 Java8 29
  • 30. Java8 • Pacote JAVA.UTIL.FUNCTIONS • Introduziu um conjunto de interfaces funcionais para a gente tirar proveito e poder usar as expressões lambda 1. Functions<T, R> A interface Function serve para fazer transformações. Na opção abaixo, ela está recebendo uma Pessoa e retornado uma string (o nome da pessoa) 14/05/2016 Java8 30
  • 31. Java8 • Pacote JAVA.UTIL.FUNCTIONS • Introduziu um conjunto de interfaces funcionais para a gente tirar proveito e poder usar as expressões lambda 1. Predicate<T> Predicado, recebe um objeto e retorna um boolean 14/05/2016 Java8 31
  • 32. Java8 • Pacote JAVA.UTIL.FUNCTIONS • Introduziu um conjunto de interfaces funcionais para a gente tirar proveito e poder usar as expressões lambda 1. Consumer<T> Um consumidor: Recebe um objeto e não retorna nada. 14/05/2016 Java8 32
  • 33. Java8 • Pacote JAVA.UTIL.FUNCTIONS • Introduziu um conjunto de interfaces funcionais para a gente tirar proveito e poder usar as expressões lambda 1. Supplier<T> Um produtor : Recebe nada e retorna um objeto 14/05/2016 Java8 33
  • 34. Java8 • Pacote JAVA.UTIL.FUNCTIONS • Introduziu um conjunto de interfaces funcionais para a gente tirar proveito e poder usar as expressões lambda 1. BinaryOperator<T> Recebe 2 objetos e retorna 1 14/05/2016 Java8 34
  • 35. Java8 Lambda + Stream + Functions 14/05/2016 Java8 35
  • 36. Java8 • Lambda + Stream + Functions 1. 1 fonte de dados 2. Obtenha um Stream 3. Aplique 1 ou mais operações Intermediárias (que retornam outro stream) 4. Aplique uma operação terminal 14/05/2016 Java8 36
  • 37. Java8 • Lambda + Stream + Functions 14/05/2016 Java8 37 Imprimir nomes de pessoas com tamanho menor que 6 Java 8: Até o Java 7: Fonte de dados:
  • 38. Java8 • Lambda + Stream + Functions 14/05/2016 Java8 38 Java 8: Predicado, recebe um objeto e retorna um boolean Um consumidor: Recebe um objeto e não retorna nada.
  • 39. Java8 • Lambda + Stream + Functions 14/05/2016 Java8 39 Java 8: Ou Resumidamente Ou Ainda
  • 40. Java8 • Lambda + Stream + Functions 14/05/2016 Java8 40 Java 8: Predicado, recebe um objeto e retorna um boolean Todo método mapTo é um transformação recebe o nome n que é uma String e retorna o tamanho Depois soma tudo. sum é um "método terminal" Estou filtrando os nomes que começam com “A”, convertendo os nomes que foram filtrados anteriormente em um lista de inteiros que corresponde aos respectivos tamanhos, depois retornando a soma desses tamanhos
  • 41. Java8 • Lambda + Stream + Functions 14/05/2016 Java8 41 Antes do Java 8:
  • 42. Java8 • Exercício Proposto 14/05/2016 Java8 42 Crie uma lista de alunos onde cada aluno possua matrícula, nome e nota. Percorra essa lista de alunos e imprima a matrícula e o nome dos alunos com nota >= 7 usando os recursos do Java 8: lambda + stream + functions
  • 43. Java8 • API JAVA.TIME • Vários Conceitos novos, para cada um tipo de data 14/05/2016 Java8 43 LocalTime Tempo 12:00:00 LocalDate Data 2015-12-12 LocalDateTime Data e tempo 2015-12-12T12:00:00 YearMonth Ano e Mês 2015-12 MonthDay Mês e dia 12-03 Instant representa um instante de tempo 2015-12-12T12:00:00.000Z Duration Intervalo de tempo em horas 30.8 seconds Period Intervalo de tempo em dias 1 year, 2 months, and 3 days
  • 44. Java8 • API JAVA.TIME • Métodos now() ou of(...) 14/05/2016 Java8 44
  • 45. Java8 • API JAVA.TIME 14/05/2016 Java8 45 É possível encadear várias chamas. A API é imutável, o objeto original não muda de valor, novos objeto são criados e retornados TemporalAdjuster: Classes que serve para fazer vários cálculos de forma simples, por exemplo, calcular o próximo domingo:
  • 46. Java8 • API JAVA.TIME 14/05/2016 Java8 46 Essa classe serve para medir um intervalo de tempo em termos de nanossegundos. Você pode obter essa quantidade de tempo em diversas unidades chamando métodos como toNanos, toMillis, getSeconds, etc.
  • 47. Java8 • API JAVA.OI / NIO 14/05/2016 Java8 47 Adição da API stream, você consegue abrir um arquivo e jogar as linhas em um stream. E a partir desse ponto usar todos os recursos de stream para processar o arquivo
  • 48. Java8 • TYPE ANNOTATION 14/05/2016 Java8 48 Capacidade de colocar anotação em qualquer declaração de tipo
  • 49. Java8 • CONCURRENCY API 14/05/2016 Java8 49 Um das características das linguagens funcionais: evitam estados mutáveis e facilitam a criação de aplicações concorrentes Adição da classe CompletableFuture<T> 1. Fornece métodos não-bloqueantes através de callbacks 2. Suporta lambdas 3. Quantidade bem maior de funcionalidades em relação a Future 4. Podemos fazer encadeamento de métodos e composição.
  • 50. Java8 • CONCURRENCY API 14/05/2016 Java8 50 para executar um lambda do tipo Supplier deseja executar uma operação em outro CompletableFuture aplica uma transformação simples através de uma função lambda thread lance uma exceção, para manipular essa situação Essa função lambda é o callback que será chamado quando CompletableFuture terminar seu processamento
  • 51. Java8 • Pictures taken from • https://pt.wikibooks.org/wiki/Programar_em_C/Makefiles • https://solidsoft.wordpress.com/category/tricks-tips/ • http://pt.slideshare.net/tomek_k/convention-over-configuration- maven-3-polyglot-maven-gradle-and-ant • https://kamaondev.wordpress.com/2013/09/16/porque-voce-deve- trocar-o-maven-pelo-gradle/ 14/05/2016 Java8 51