O documento descreve as principais novidades introduzidas no Java 8. Em destaque estão: (1) interfaces funcionais e métodos default e estáticos em interfaces, (2) Stream API para manipulação de fluxos de dados, (3) expressões lambda para criação de funções anônimas, e (4) nova Date Time API.
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
Java Is Back, Novidade do Java 8
1. Lançamento
do
Java
8
–
Java
Is
Back
Eder
Magalhães
@edermag
Novidades
do
Java
8
2. Agenda
ü Expecta;va;
ü Interfaces
Funcionais,
sta;c
e
default;
ü Stream
API;
ü Lambda
Expressions;
ü Method
reference;
ü Date
Time
API;
ü Algumas
mudanças
em
Collec;ons;
ü Outras
novidades
e
melhorias;
3. Expecta;va
do
Java
8
ü Linguagem
mais
poderosa:
ü O;mizações
na
VM;
ü Melhorias
em
processamento
paralelo;
ü Programação
mais
diver;da:
ü Escreva
menos
e
faça
mais;
ü APIs
modernas
e
eficientes;
4. Interfaces
Funcionais
ü Layout
padrão
para
interfaces
“enxutas”;
ü Interfaces
que
definem
apenas
um
método
abstrado;
ü @FunctionalInterface é
opcional
(like
@Override);
ü São
essenciais
para
o
uso
de
Expressões
Lambda;
5. Interfaces
Funcionais
Java
ü Interfaces
do
legado
Java,
são
Funcionais:
ü Runnable
ü Comparable
ü FileFilter
ü PathMatcher
6. Método
default
em
Interfaces
ü Possibilidade
de
definir
o
código
de
um
método,
em
um
contrato;
public interface CriterioPontualidade {
...
default boolean isPontual() {
return getPrevisao.isBefore(getRealizacao());
}
}
7. Método
default
em
Interfaces
ü Principal
mo;vação:
compa;bilidade
com
o
legado;
ü O
método
pode
ser
sobreescrito,
sempre
prevalesce
a
versão
do
objeto
(implementador);
ü Compilador
não
aceita
conflitos;
ü Não
faz
sen;do
criar
métodos
default
p/
métodos
de
Object
(equals
/
hashcode
/
toString).
Compilador
não
aceita;
8. Método
sta;c
em
Interfaces
ü Viabilizar
a
definição
de
métodos
u;litários
no
próprio
contrato;
public interface CriterioPontualidade {
...
static Comparator<CriterioPontualidade> sortByPrevisao() {
return new Comparator<CriterioPontualidade> () { ... };
}
}
9. Pacote
java.util.function
ü JDK
8
disponibiliza
uma
série
de
novas
interfaces
funcionais;
ü Function:
recebe
um
argumento
e
retorna
um
objeto;
ü Consumer:
recebe
um
argumento,
sem
retorno
(void);
ü Supply:
não
recebe
argumento
e
retorna
uma
objeto;
ü Predicate:
recebe
um
argumento
e
retorna
um
boolean;
ü BinaryOperator:
recebe
dois
argumentos
e
retorna
um;
ü Especializações
para
primi;vos,
ex:
ToIntFunction;
10. Stream
API
ü Nova
API
para
manipulação
de
fluxo
de
dados;
ü API
con;da
no
pacote
java.util.stream;
ü As
Coleções
do
Java
foram
adaptadas
para
o
uso
de
Stream;
ü Em
Coleções
atuam
de
forma
similar
a
um
Iterator;
11. Destaque
de
Stream
ü forEach:
processa
cada
elemento
con;do
no
Stream;
ü map:
permite
realizar
transformações
em
dados
do
stream;
ü filter:
uso
de
critérios
p/
avaliar
cada
elemento
do
stream;
ü distinct:
avalia
cada
elemento
do
stream
para
desconsiderar
duplicidades;
ü collect:
capturar
todos
os
elementos
con;dos
em
um
stream;
ü count, max, sum
e
vários
outros
…
12. Detalhes
sobre
Stream
ü Intermediate:
ü O
Stream
con;nua
aberto,
normalmente
retornam
um
novo
Stream.
Ex:
filter;
ü Terminate:
ü O
Stream
é
concluído.
Ex:
count;
ü Podem
ser
processados
paralelamente;
13. Lambda
ü A
grande
novidade
do
Java
8;
ü O
Java
mais
funcional,
incorporando
DSLs;
ü Uma
forma
expressiva
de
criar
funções
anônimas
(Interfaces
Funcionais);
ü Maior
impacto
para
os
programadores;
18. Tarefa
simples:
ordenar
um
array
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Arrays.sort(nomes,
(s1, s2) -> s1.compareToIgnoreCase(s2)
);
Outra
opção
19. Lambda,
a
mo;vação
ü Programação
direta,
mais
obje;va;
ü Eliminar
verbosidade
(código
ver;cal);
ü Melhor
processamento
em
ambientes
mul;-‐core;
21. Method
reference
ü Uma
forma
mais
compacta
de
escrever
expressões
Lambda;
ü Lambda
definida
via
nome
de
um
método;
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Arrays.sort(nomes,
String::compareToIgnoreCase
);
22. Com
Lambda
não
é
possível
fazer:
ü Acessar
variáveis
non-‐final;
ü Transparência
no
lançamento
de
excep;ons;
ü Controle
de
fluxo,
no
forEach
não
é
possível
encerrar
o
loop;
23. Date
Time
API
ü Nova
API
para
manipulação
de
datas;
ü Mais
clara,
organizada
e
eficiente;
ü Define
estruturas
para:
ü Data
e
Horario;
ü Data;
ü Horario;
ü Períodos
e
instantes;
ü Baseada
na
API
Joda
Time;
24. Melhorias
na
API
de
coleções
ü Iterable.forEach(Consumer);
ü Collec;on.removeIf(Predicate);
ü Collec;on.stream();
ü Collec;on.parallelStream();
ü Map.forEach(BiConsumer);
ü Map.getOrDefault(Object,
V);
25. Outras
melhorias
ü String.join;
ü Novos
componentes
em
Concurrency
API;
ü Novos
componentes
em
IO/NIO
API;
ü Mudanças
em
Reflec;on;
ü Objetos
opcionais:
Optional, OptionalInt,
OptionalDouble, OptionalLong;
ü Classe
Base64;
ü Novos
métodos
em
Math, Wrappers, ThreadLocal …
26. Demos
ü As
demos
dessa
palestra
foram
compar;lhadas
na
url:
hips://github.com/edermag/java8-‐is-‐back