Vídeo: Introdução ao Lambda do Java 8 2024
O Java possui métodos extravagantes que fazem o melhor uso de fluxos e expressões lambda. Com fluxos e expressões lambda, você pode criar uma linha de montagem. A solução de linha de montagem usa conceitos de programação funcional.
A linha de montagem consiste em vários métodos. Cada método leva os dados, transforma os dados de uma forma ou outra e entrega seus resultados para o próximo método na linha. Aqui está uma linha de montagem.
Cada caixa representa um monte de matérias-primas à medida que elas são transformadas ao longo de uma linha de montagem. Cada seta representa um método (ou, metaforicamente, um trabalhador na linha de montagem).
Por exemplo, na transição da segunda caixa para a terceira caixa, um método de trabalhador (o método
filtro
) destaca vendas de itens que não são DVDs. Imagine Lucy Ricardo de pé entre a segunda e a terceira caixas, removendo cada livro ou CD da linha de montagem e jogando-o descuidadamente no chão.
O parâmetro para o método
filtro
de Java é um Predicado
- uma expressão lambda cujo resultado é
booleano
. O método
filtro
destaca itens que não passam o teste
verdadeiro / falso
da expressão lambda.
Nome do Método | Membro de | Parâmetro (s) | Tipo de Resultado | Valor de Resultado |
fluxo
|
Coleção
(por exemplo,
ArrayList
, objeto) |
(nenhum) |
Stream
|
Um fluxo que escuta elementos da coleção |
filtro
|
Stream
|
Predicate
|
Stream > Um novo fluxo contendo valores para os quais a expressão lambda retorna
|
verdadeiro
mapa
|
Stream
|
Função
|
Stream
|
Um novo fluxo contendo os resultados da aplicação da expressão lambda ao fluxo recebido
|
reduzir |
Stream
|
BinaryOperator
|
O tipo usado pelo
|
BinaryOperator
O resultado da combinação de todos os valores no fluxo de entrada
|
|
mapa
) puxa o
preço
de cada
venda
. A partir do local desse trabalhador, a linha de montagem contém apenas valores
preço
.
Para ser mais preciso, o método
<
do Java usa uma
Função
como
(venda) -> venda. getPrice ()
e aplica a
Function
a cada valor em um fluxo. Portanto, o
mapa
método leva uma entrada de
venda
objetos e cria um fluxo de saída
preço
valores.
Na transição da quarta caixa para a quinta caixa, um método de trabalhador (o método
reduzir
) adiciona os preços das vendas de DVD.O método
reduzir
de Java leva dois parâmetros:
O primeiro parâmetro é um valor inicial.
Na imagem acima, o valor inicial é
0. 0
.
O segundo parâmetro é um
BinaryOperator
.
Na imagem acima, reduzir
método
BinaryOperator
é
(price1, price2) -> price1 + price2
O método
reduzir
usa o
BinaryOperator
para combinar os valores do fluxo recebido. O valor inicial serve como ponto de partida para toda a combinação. Assim, o método
reduzir
faz duas adições.
O método de redução adiciona dois valores de um fluxo recebido.
reduzir (10. 0, (value1, value2) -> value1 * value2)
com o fluxo cujos valores incluem
3. 0
,
2. 0
e
5. 0
. A ação resultante é mostrada abaixo
O método de redução multiplica os valores de um fluxo recebido.
Você pode ter ouvido falar do modelo de programação MapReduce do Google. A semelhança entre o nome do modelo de programação e os nomes dos métodos Java mapa
e
reduzir
não é uma coincidência.
Tomados como um todo, toda a montagem alinha os preços dos DVDs vendidos. O código acima contém um programa completo usando os fluxos e expressões lambda a primeira imagem acima.
importar java. texto. Formato numérico;
importar java. util. ArrayList;
classe pública TallySales {
public static void main (String [] args) {
ArrayList
vendas = nova ArrayList <> ();
fillTheList (vendas);
total duplo = vendas. stream ()
. filtro ((venda) -> venda. getItem (). igual ("DVD"))
. mapa ((venda) -> venda. getPrice ())
. reduzir (0. 0, (preço1, preço2) -> preço1 + preço2);
Sistema. Fora. println (formato de moeda (total));
}
static void fillTheList (ArrayList
vendas) {
vendas. adicionar (venda nova ("Livro", 12. 00));
vendas. adicionar (venda nova ("DVD", 21. 00));
vendas. adicionar (venda nova ("CD", 5. 25));
}
}
O código requer Java 8 ou posterior. Se o seu IDE estiver configurado para uma versão Java anterior, você pode ter que mexer com as configurações do IDE. Você pode até ter que baixar uma versão mais recente do Java.
O negrito é uma grande declaração de atribuição de Java. O lado direito da declaração contém uma seqüência de chamadas de método. Cada chamada de método retorna um objeto e cada um desses objetos é a coisa antes do ponto na próxima chamada de método. É assim que você forma a linha de montagem.
Por exemplo, perto do início do código em negrito, o nome
vendas
refere-se a um objeto
ArrayList
. Cada objeto
ArrayList
possui um método
fluxo
. No código acima,
vendas. stream ()
é uma chamada para esse método
ArrayList
objeto
fluxo
.
O método de fluxo retorna uma instância da classe
Stream
de Java. (Que surpresa!) Então
vendas. stream ()
refere-se a um objeto
Stream
.
Obtendo todas as vendas de DVD.
Stream
possui um método
filtro
. Então
vendas. corrente(). filter ((venda) -> venda. getItem (). equal ("DVD"))
é uma chamada para o método
Stream
objeto
filtro
.
O padrão continua. O método
Stream
objeto
mapa
retorna ainda outro objeto
Stream
- um
Stream
contendo preços.
Obtendo o preço de cada venda de DVD.
Para Stream
dos preços, você aplica o método
reduzir
, que produz um valor
duplo
- o total dos preços do DVD.
Obtendo o preço total de todas as vendas de DVD.