java 8 - a evolução da linguagem
TRANSCRIPT
![Page 1: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/1.jpg)
A evolução da linguagemVIII Simpósio de Informática do IFNMG Januária
Prof. Ms. Petrônio Cândido
![Page 2: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/2.jpg)
Agenda
● Por quê Java?● História e evolução da linguagem Java● Novas funcionalidades do Java 8● O mercado atual● Perspectivas futuras: Java 9
![Page 3: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/3.jpg)
Por quê Java?Por que sim não é resposta!
![Page 4: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/4.jpg)
Por que Java???● Compilada em Código Intermediário (bytecode)
○ Alta portabilidade: write once, run everywhere!● Alto Nível● Propósito Geral● Orientada à Objetos● Tipagem Forte e Estática
![Page 5: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/5.jpg)
Outros fatores
● Grande comunidade de desenvolvedores
● Ecossistema de frameworks, API’s, etc.
● Adoção da Indústria:
![Page 6: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/6.jpg)
Outros fatores
![Page 7: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/7.jpg)
Criticas● Rígida
● Burocrática
● Conservadora
![Page 8: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/8.jpg)
Criticas
● Produtividade ○ Mais funcionalidade, menos código○ Economia de tempo
● Expressividade○ Quantas linhas são necessárias para desenvolver
uma funcionalidade simples?○ Verborragia
![Page 9: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/9.jpg)
![Page 10: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/10.jpg)
Ninguém tem mais mercado!
![Page 11: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/11.jpg)
Ninguém tem mais mercado!
WEB
MOBILE
DESKTOP
ENTERPRISE
DADOS
SERVIDORES
JSP JSF JavaFX
JME Android JavaFX
JavaFXSwing
EJB
Hibernate JPA JDBC
Tomcat JBoss Glassfish
TV DIGITAL Ginga
Spring
VRaptor
![Page 12: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/12.jpg)
História do JavaE como chegamos a este ponto...
![Page 13: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/13.jpg)
Evolução da Linguagem Java
● 1992 - 1994 - Primórdios do Java ○ Proprietária: Sun Microsystems○ Oak
![Page 14: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/14.jpg)
Evolução da Linguagem Java
● 1995 - Java 1.0○ Orientada a Objetos○ AWT - Abstract Window Toolkit - Desktop○ Applets - Web○ Python 1.0
![Page 15: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/15.jpg)
Processo de Compilação/Execução
javac.exeArquivo.java
Arquivo.class java.exe
Compilador Java
Java Virtual MachineInterpretador de bytecode
bytecode
Arquivo fonte
![Page 16: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/16.jpg)
Como era o Java original ?
● Orientação à Objetos PURA!
○ TUDO tem que estar dentro de uma classe;
○ TODA classe tem que estar dentro de um arquivo
com o seu nome;
![Page 17: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/17.jpg)
Como era o Java original ?
● Orientação à Objetos PURA!○ Herança Simples○ Polimorfismo○ Encapsulamento○ Interfaces○ Classes Abstratas○ Atributos e Métodos Estáticos○ Pacotes○ Modificadores de Visibilidade
![Page 18: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/18.jpg)
ClassesPessoa.java
public class Pessoa {
private String nome;
public String getNome() { return nome; }
public void setNome(String n) { this.nome = n; }
}
Professor.java
public class Professor extends Pessoa {
private String siape;
public String getSiape() { return siape; }
public void setSiape(String n) { this.siape = n; }
}
![Page 19: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/19.jpg)
Como era o Java original ?
● Threads - Processos Leves● Tratamento de Exceções
![Page 20: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/20.jpg)
Interface
● Especifica um conjunto de métodos mas não os implementa;
● É um “contrato” a ser seguido por outras classes;
![Page 21: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/21.jpg)
InterfaceImprimivel.java
public interface Imprimivel {void Imprime();
}Pessoa.java
public class Pessoa implements Imprimivel {public void Imprime() {
System.out.println(“Teste”);}
}
![Page 22: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/22.jpg)
Evolução da Linguagem Java
● 1997 - Java 1.1○ Inner Classes○ JDBC - Java Database Conectivity - BD○ RMI - Remote Method Invocation - Sist. Distribuídos○ Reflexão○ Servlet 1.0 - Web○ NetBeans 1.0 - IDE
![Page 23: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/23.jpg)
Evolução da Linguagem Java
● A reflexão computacional permite a invocação dinâmica de classes○ Estático (em tempo de compilação) x Dinâmico (em
tempo de execução)○ Carregar na memória○ Inspecionar atributos e métodos○ Invocar métodos
![Page 24: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/24.jpg)
Inner Class - Classe Interna
● Uma classe declarada dentro de outra classe;
● Uma classe auxiliar que só será utilizada dentro de outra classe;public class Externa { class Interna { … }}
![Page 25: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/25.jpg)
Local Class - Classe Local
● Uma classe declarada dentro de um método, como uma variável local;
● A classe só será utilizada dentro desse método;
![Page 26: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/26.jpg)
Classe Anônima● É uma classe interna e sem nome, definida e
instanciada em uma única expressão;● Utilizado quando:
○ Criar uma implementação de uma interface ou uma classe filha que vai ser utilizada uma única vez;
○ Corpo da classe é muito curto;
![Page 27: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/27.jpg)
Classe AnônimaButton btn = new Button();
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } });
![Page 28: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/28.jpg)
Evolução da Linguagem Java
● 1998 - Java 2 ( versão 1.2 )○ Criado o JCP - Java Community Process○ Collections - List, Array, Hash, ...○ SWING - Desktop○ J2SE - Java 2 Standard Edition○ J2EE - Java 2 Enterprise Edition
■ EJB - Enterprise JavaBean○ J2ME - Java 2 Micro Edition - Mobile
![Page 29: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/29.jpg)
JCP - Java Community Process
● https://www.jcp.org/● JSR - Java Specification Request
(Darcy, 2014)
![Page 30: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/30.jpg)
Evolução da Linguagem Java
● 1999 - Java 2 ( versão 1.3 )○ Código fonte do Java 2 é aberto○ JSP - Java Server Pages - Web○ NetBeans 3○ Apache Tomcat 3.0 - Servidor Aplicações Java○ JBoss - Servidor Aplicações Java e Java EE
![Page 31: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/31.jpg)
Evolução da Linguagem Java
● 2000 - Java 2 ( versão 1.3 )○ JNDI - Java Naming and Directory Interface○ Suporte ao CORBA no RMI○ J2ME dá um salto○ Python 2.0
● 2001○ Hibernate 1.0○ AspectJ
![Page 32: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/32.jpg)
Evolução da Linguagem Java
● 2002 - Java 2 ( versão 1.4 )○ Java Web Start○ Microsoft copia o Java: .Net Framework 1.0
■ E inova: C#
![Page 33: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/33.jpg)
Evolução da Linguagem Java
● 2003 - Java 2 ( versão 1.4 )○ Hibernate 2.0○ .Net Framework 1.1
● 2004 - Java 2 ( versão 1.4 )○ NetBeans 4○ JSF - Java Server Faces 1.0 - Web○ Criação da Eclipse Foundation
![Page 34: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/34.jpg)
Evolução da Linguagem Java
● 2005 - Java 2 ( versão 1.5)○ Glassfish 1.0 - Servidor de Apli. Web e Java EE○ Hibernate 3.0○ .Net Framework 2.0
![Page 35: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/35.jpg)
Evolução da Linguagem Java
● 2005 - Java 2 ( versão 1.5)○ Correndo atrás do C#:
■ Generics■ Annotations■ Enums
![Page 36: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/36.jpg)
Evolução da Linguagem Java
● Generics - Tipos Genéricos○ Tipos genéricos nos permitem criar classes com
atributos cujo tipo só será conhecido no nomento da instanciação ou da herança;
○ Uma única declaração cria toda uma família de classes parametrizáveis
![Page 37: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/37.jpg)
Evolução da Linguagem Javapublic class Ponto {
private int x, y;public Ponto(int x, int y) {
this.x = x; this.y = y;
}public int getX() { return x; }public int getY() { return y; }
}
![Page 38: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/38.jpg)
Evolução da Linguagem Javapublic class Ponto<T> {
private T x, y;public Ponto(T x, T y) {
this.x = x; this.y = y;
}public T getX() { return x; }public T getY() { return y; }
}
![Page 39: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/39.jpg)
Evolução da Linguagem JavaPonto<Integer> pontoi = new Ponto<Integer>(1, 2);
Ponto<Float> pontof = new Ponto<Float>(1.1, 2.75);
Ponto<Double> pontod = new Ponto<Double>(1.1, 2.75);
Ponto<Long> pontol = new Ponto<Long>(1, 2);
![Page 40: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/40.jpg)
Evolução da Linguagem Java
● Metadados - Annotations○ Permite colocar metadados (i.e. anotações) em
classes, objetos, tipos e métodos que posteriormente podem ser recuperados via Reflexão.
○ Ajuda a “injetar” comportamentos, sem ter que invocá-los explicitamente!
○ @Annotation
![Page 41: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/41.jpg)
@NotNullString nome;
@NullString descricao;@Max(100)int idade;
@Size(min=2, max=240)String endereco;
@PastDate aniversario;
Evolução da Linguagem Java
![Page 42: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/42.jpg)
Evolução da Linguagem Java
● Enums - Enumerações○ Enumerações nos ajudam a criar objetos de valor○ São classes modificadas cujos objetos só podem
assumir um conjunto finitido de constantes;
public enum Sexo {
Masculino,
Feminino
}
![Page 43: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/43.jpg)
Evolução da Linguagem Java
● 2006 - Java 6 ( versão 1.6)○ NetBeans 5.0○ A maior parte da linguagem e posta como Software
Livre○ JSF 1.2○ JPA - Java Persistence API 1.0
■ Padronização a partir do Hibernate
![Page 44: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/44.jpg)
Evolução da Linguagem Java
● 2007 - Java 6 ( versão 1.6)○ NetBeans 6.0○ .Net Framework 3.5
■ Extensão Funcionais■ LINQ - Language Integrated Query■ Suporte a linguagens dinâmicas
![Page 45: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/45.jpg)
Evolução da Linguagem Java
● 2008 - Java 6 ( versão 1.6)○ JavaFX 1.0 - Desenvolvimento multi-interface○ Android 1.0○ Python 3.0
![Page 46: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/46.jpg)
Evolução da Linguagem Java
● 2009○ A Oracle compra a Sun○ JSF 2.0○ Android 2.0○ JPA 2.0
● 2010○ Android 2.2○ Hibernate 3.0 se torna um JPA 2.0 Provider○ .Net Framework 4.0
![Page 47: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/47.jpg)
Evolução da Linguagem Java
● 2011 - Java 7 ( versão 1.7 )○ NetBeans 7.0○ Suporte a linguagens dinâmicas○ JVM multi-linguagem○ JSF 2.1○ Android 2.3 / 4.0○ Hibernate 4.0
![Page 48: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/48.jpg)
Evolução da Linguagem Java
● 2011 - Java 7 ( versão 1.7 )○ Constantes string no switch○ Catch multi classe
![Page 49: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/49.jpg)
Java 8E como chegamos a este ponto...
![Page 50: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/50.jpg)
Evolução da Linguagem Java
● A versão 8 introduz na linguagem Java o Paradigma Funcional;
● O Paradigma Funcional permite que funções possam ser tratadas como variáveis, parâmetros de outras funções ou mesmo valor de retorno!
![Page 51: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/51.jpg)
Evolução da Linguagem Java
● Por que Java demorou tanto?
○ Manter compatibilidade com as versões anteriores;
■ Códigos legados...
○ Processo democrático de aprovação das JSRs
![Page 52: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/52.jpg)
Default Methods
Métodos dentro de uma interface que já vêm com uma implementação padrãopublic interface Teste {
void metodo1();
void metodo2();
default void metodo3() { implementação; }
}
![Page 53: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/53.jpg)
Interfaces Funcionais
● É qualquer interface que tenha apenas um método.
● Sempre que eu precisar de usar essa interface o compilador sabe exatamente qual método deve chamar!
● O pacote java.util.function já tem um monte de interfaces funcionais úteis!
![Page 54: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/54.jpg)
Interfaces Funcionais
● java.util.functionInterface Descrição
Consumer<T> Aceita um parâmetro do tipo T e não produz nenhum retorno
Function<T,R> Aceita um parâmetro do tipo T e produz um retorno do tipo R
Predicate<T> Representa um predicado, ou seja, uma função que aceita um parâmetro do tipo T e retorna um booleano
Supplier<T> Representa uma função que não tem parâmetros e produz um retorno do tipo T
UnaryOperator<T> Representa um operador unário, que aceita um parâmetro do tipo T e retorna um valor do tipo T
![Page 55: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/55.jpg)
Interfaces Funcionais
● java.util.functionInterface Descrição
Consumer<T> void consumer(T par);
Function<T,R> R function(T par);
Predicate<T> boolean predicate(T par)
Supplier<T> T supplier()
UnaryOperator<T> T unaryoperator(T par)
![Page 56: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/56.jpg)
Interfaces Funcionais
● OutrasInterface Descrição
Comparer<T> Aceita duas entradas do tipo T retorna um inteiro (-1, 0, 1)
Runnable Executa um método sem entrada e nem valor de retorno
![Page 57: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/57.jpg)
Expresões Lambda
● Cria um método anônimo:
(parâmetros) -> função
() -> System.out.println(“Teste”)
(a,b) -> a + b;
(a,b) -> a > b;
![Page 58: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/58.jpg)
Expresões Lambda
● Nos permitem criar variáveis que armazenam funções!
Interface var = (parametros) -> função
var(parametros);
Predicate<Pessoa> maior = p -> p.getIdade() >= 18;
![Page 59: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/59.jpg)
Method References
Retornam um ponteiro para um método:
Referência para um método estático Classe::metodoEstatica
Referência para um método de instância objeto::metodoInstancia
Contrutor Classe::new
![Page 60: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/60.jpg)
Collections
● A nova API de coleções e fortemente influenciada pela LINQ do .Net
● Com ela podemos fazer operações complexas em coleções de objetos na memoria de forma simples e intuitiva;
● Ela faz uso das expressões lambda e method references;
![Page 61: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/61.jpg)
Collections
● Objetivo○ Simplificar os algoritmos que trabalham com muitos
dados em memória;○ Permitir a execução paralela de processamento de
dados com facilidade;
![Page 62: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/62.jpg)
Collections
● Coleção de objetos
● Computada na construção○ Estrutura de dados na memória
● Tamanho finito
![Page 63: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/63.jpg)
CollectionsList<Integer> inteiros = new ArrayList<>();
for(int i = 0; i < 10; i++)inteiros.add(i);
for(Integer i : inteiros){if(i % 2 == 0) {
System.out.println(i);}
}
![Page 64: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/64.jpg)
Streams
● É uma coleção de objetos
● Computada a cada iteração
● Tamanho infinito
![Page 65: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/65.jpg)
StreamsStream<Integer> inteiros = Stream.iterate(0, i <- i + 1).limit(10);
inteiros .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(i));
![Page 66: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/66.jpg)
Streams
● Parallel Streams○ Divide o processamento em várias threads
○ collection.parallelStream();
![Page 67: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/67.jpg)
StreamsStream<Integer> inteiros = Stream.iterate(0, i <- i + 1). parallel() .limit(10);
inteiros .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(i));
![Page 68: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/68.jpg)
Collections - Funções IntermediáriasMétodo Descrição
filter(Predicate) Seleciona itens da stream cujo predicato retorna verdadeiro
map(Function) Aplica a Function em todos os elementos da Stream. O retorno da função forma os novos elementos da Stream
sorted(Comparator) Ordena os elementos da Stream de acordo com o Comparator
sorted() Ordena os elementos da Stream de acordo (se forem numéricos
peek(Consumer) Executa uma função para cada elemento da Stream
distinct() Retira todos os elementos duplicados da Stream
limit(n) Seleciona os primeiros n elementos Stream
skip(n) Elimina os primeiros n elementos da Stream
![Page 69: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/69.jpg)
Collections - Funções FinaisMétodo Descrição
toArray() Cria uma vetor com os elementos da Stream
toList() Cria uma lista com os elementos da Stream
forEach(Consumer) Aplica a função Consumer em cada elemento da Stream
collect(Collector) elemento da Stream
reduce(BinaryOperator) elemento da Stream
min(Comparator) Retorna o menor elemento (de acordo com o Comparator) da Stream
max(Comparator) Retorna o maior elemento (de acordo com o Comparator) da Stream
count() Retorna o número de elementos da Stream
![Page 70: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/70.jpg)
Collections - Funções FinaisMétodo Descrição
anyMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for verdadeira para algum elemento da Stream
allMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for verdadeira para todos os elementos da Stream
noneMatch(Predicate) Retorna verdadeiro se a aplicação do Predicate for falsa para todos os elementos da Stream
ifPresent(Consumer)
findAny()
findFirst()
![Page 71: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/71.jpg)
ExemplosList<Pessoa> pessoas = new List<>();
....
pessoas.filter(u -> u.getSexo() == Sexos.Feminino && u.getIdade() > 18).peek(System.out::println).sorted(Comparator.comparing(Pessoa::getNome)).map(Pessoa::getNome()).collect(toList());
![Page 72: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/72.jpg)
Exemplosint media = pessoas
.filter(u -> u.getSexo() == Sexos.Feminino && u.getIdade() > 18)
.mapToInt(Pessoa::getIdade())
.average();
int total = pessoas.mapToInt(Pessoa::getIdade()).reduce(0, (a,b) -> a + b);
![Page 73: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/73.jpg)
Mercado e Perspectivas Futuras
![Page 74: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/74.jpg)
Evolução da Linguagem Java
● 2016 (expectativa) - Java 9○ Código fonte modular○ JSON API leve○ Cliente HTTP2○ Otimizações no compilador
![Page 75: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/75.jpg)
Principais Concorrentes
● C# / .Net
● Python
● Ruby
![Page 76: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/76.jpg)
Dúvidas???
![Page 77: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/77.jpg)
Obrigado!!!
![Page 78: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/78.jpg)
ReferênciasDARCY, Joseph D. Joseph D. Darcy's Oracle Weblog: A Pictorial View of a JSR Progressing through the JCP. Disponível em <https://blogs.oracle.com/darcy/entry/pictorial_jcp>. Acesso em 20/10/2014.NETBEANS.ORG. A brief history of netbeans. Disponível em <https://netbeans.org/about/history.html>. Acesso em 10/10/2014.ORACLE. Collections Framework Enhancements in Java SE 8. Disponível em <http://docs.oracle.com/javase/8/docs/technotes/guides/collections/changes8.html > . Disponível emORACLE. Java Timeline. Disponível em <http://oracle.com.edgesuite.net/timeline/java/>. Acesso em 06/10/2014.ORACLE. Lambda Expressions. Disponível em <http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html>. Acesso em 22/10/2014.ORACLE. Default Methods. Disponível em <http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html >. acesso em 19/10/2014.ORACLE. Method References. Disponível em <http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html >. Disponível em 19/10/2014.
![Page 79: Java 8 - A Evolução da Linguagem](https://reader031.vdocuments.pub/reader031/viewer/2022012402/55a5a0d31a28abf24a8b4593/html5/thumbnails/79.jpg)
ReferênciasTIOBE. TIOBE index for October 2014. Disponível em <http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html >. Acesso em 22/10/2014.