2. Globalcode
–
Open4education
Sobre mim
Frederico Maia Arantes
Goiano, atualmente no Rio de Janeiro
+7 anos de experiência em desenvolvimento
Desenvolvedor de software no LIP da TecSinapse
Instrutor de cursos Java na Caelum
Estudante - MBA em Engenharia de Software na UFRJ
4. Globalcode
–
Open4education
Classe ‘Ingresso’
public
class
Ingresso
{
private
String
nomeEvento;
private
double
valor;
public
Ingresso(String
nomeEvento,
double
valor)
{
this.nomeEvento
=
nomeEvento;
this.valor
=
valor;
}
//getters
e
setters
//toString()
}
5. Globalcode
–
Open4education
Loop tradicional
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
for(Ingresso
ingresso
:
ingressos)
{
System.out.println(ingresso);
}
}
6. Globalcode
–
Open4education
Novo loop com forEach
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(consumer);
//recebe
um
Consumer
//Consumer
é
uma
nova
interface
do
Java
8
com
um
único
método
}
7. Globalcode
–
Open4education
Novo loop com forEach
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
Consumer<Ingresso>
consumer
=
new
Consumer<Ingresso>()
{
@Override
public
void
accept(Ingresso
ingresso)
{
System.out.println(ingresso);
}
};
ingressos.forEach(consumer);
//recebe
um
Consumer
}
8. Globalcode
–
Open4education
Novo loop com forEach
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(new
Consumer<Ingresso>()
{
@Override
public
void
accept(Ingresso
ingresso)
{
System.out.println(ingresso);
}
});
}
10. Globalcode
–
Open4education
Default methods
Novos métodos, com implementação, adicionados às
interfaces Java, como em Collections e Map.
Veja por exemplo o forEach:
default
void
forEach(Consumer<?
super
T>
action)
{
Objects.requireNonNull(action);
for
(T
t
:
this)
{
action.accept(t);
}
}
Outros: removeIf, sort, compare, computeIfPresente.
Você pode criar default methods em suas interfaces.
12. Globalcode
–
Open4education
Lambdas
O que são?
De onde vem?
De que se alimentam?
“Simplificando bastante, um lambda no Java é uma maneira
mais simples de implementar uma interface que tem um
único método.”
13. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(new
Consumer<Ingresso>()
{
@Override
public
void
accept(Ingresso
ingresso)
{
System.out.println(ingresso);
}
});
}
14. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(new
Consumer<Ingresso>()
{
public
void
accept(Ingresso
ingresso)
{
System.out.println(ingresso);
}
});
}
15. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(
{
public
void
accept(Ingresso
ingresso)
{
System.out.println(ingresso);
}
});
}
16. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(
(Ingresso
ingresso)
{
System.out.println(ingresso);
});
}
17. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(
(Ingresso
ingresso)
-‐>
{
System.out.println(ingresso)
}
);
}
18. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(
ingresso
-‐>
{
System.out.println(ingresso)
}
);
}
19. Globalcode
–
Open4education
Lambdas
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
Arrays.asList(
new
Ingresso("Festa
1",
100.0),
new
Ingresso("Festa
2",
150.0),
new
Ingresso("Festa
3",
200.0));
ingressos.forEach(ingresso
-‐>
System.out.println(ingresso));
}
20. Globalcode
–
Open4education
Functional Interfaces
Interfaces com um único método abstrato. Este é um
requisito obrigatório.
Exemplo: Consumer. Assim no forEach o compilador sabe
o método que deverá ser implementado no lambda.
Funciona só em interfaces novas do Java 8? Não.
Para as novas, e as suas implementações, temos a
anotação opcional @FunctionalInterface.
22. Globalcode
–
Open4education
Streams
Trabalhar com coleções sempre envolve muito código.
Em muitas linguagens temos por exemplo um ‘filter’ pra
facilitar nossa vida.
Forma mais funcional de lidar com coleções.
23. Globalcode
–
Open4education
Filtrar da forma tradicional
public
static
void
main(String[]
args)
{
List<Ingresso>
ingressos
=
new
ArrayList<>();
ingressos.add(new
Ingresso("Festa
1",
100.0));
ingressos.add(new
Ingresso("Festa
2",
150.0));
ingressos.add(new
Ingresso("Festa
3",
180.0));
List<Ingresso>
ingressosBaratos
=
new
ArrayList<>();
for(Ingresso
ingresso
:
ingressos)
{
if(ingresso.getValor()
<
120)
{
ingressosBaratos.add(ingresso);
}
}
}