Usando correntes e expressões lambda em java
Java tem métodos extravagantes que fazem uma utilização óptima dos córregos e expressões lambda. Com córregos e expressões lambda, você pode criar uma linha de montagem. A solução de linha de montagem utiliza conceitos de programação funcional.
Conteúdo
A linha de montagem é composto por vários métodos. Cada método tem os dados, transforma os dados em alguma forma ou de outra, e entrega seus resultados para o método seguinte na linha. Aqui está uma linha de montagem.
Video: Java8 - Aula 2 - Expressão Lambdas
Cada caixa representa um grupo de matérias-primas como eles 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 do segundo para o terceiro quadro de caixa, um método de trabalhador (a filtro
método) Peneire a venda de itens que não são DVDs. Imaginar Lucy Ricardo estando entre o segundo e terceiro caixas, a remoção de cada livro ou o CD da linha de montagem e lançá-lo negligentemente para o chão.
O parâmetro para Java do filtro
método é um Predicado
- uma expressão lambda cujo resultado é boleano
. o filtro
método de peneira para fora artigos que não passam o lambda expressão de verdadeiro falso
teste.
Nome do método | Membro de | Parâmetro (s) | Tipo de resultado | resultado Valor |
corrente | Coleção (Por exemplo, uma ArrayList , objeto) | (Nenhum) | Corrente | Um fluxo que cospe elementos da coleção |
filtro | Corrente | Predicado | Corrente | Um novo fluxo que contém os valores para que a expressão lambda retornos verdade |
mapa | Corrente | Função | Corrente | Um novo fluxo que contém os resultados da aplicação da expressão lambda para o fluxo de entrada |
reduzir | Corrente | BinaryOperator | O tipo usado pela BinaryOperator | O resultado da combinação de todos os valores do fluxo de entrada |
Na transição entre a terceira caixa para a quarta caixa, um método de trabalhador (a mapa
método) puxa o preço
fora de cada venda
. Do lugar que o trabalhador em diante, a linha de montagem contém apenas preço
valores.
Para ser mais preciso, Java de mapa
método leva um Função
tal como
(venda) ->- sale.getPrice ()
e aplica o Função
para cada valor de uma corrente. Então o mapa
método recebe um fluxo de entrada de venda
objetos e cria um fluxo de saída de preço
valores.
Na transição entre o quarto caixa para o quinto caixa, um método de trabalhador (a reduzir
método) acrescenta-se os preços de vendas de DVD. Java de reduzir
método tem 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, o reduzir
métodos BinaryOperator
é
Video: Aula 1600 java - Função String Lentgh no Eclipse
(Price1, price2) ->- Price1 + price2
o reduzir
método utiliza a sua BinaryOperator
para combinar os valores do fluxo de entrada. O valor inicial serve como o ponto de partida para todas as combinar. Então o reduzir
método faz duas adições.
Para efeito de comparação, imagine chamar o método
reduzir (10,0, (valor1, valor2) -&valor1 GT- * valor2)
com o fluxo cujos valores incluir 3,0
, 2,0
, e 5
. A acção resultante é mostrado abaixo
Você pode ter ouvido de 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.
Tomado como um todo, toda a linha de montagem até os preços dos DVDs vendidos. O código acima contém um programa completo utilizando as correntes e expressões lambda a primeira imagem acima.
importação java.text.NumberFormat-
importação java.util.ArrayList-
TallySales classe pública {
main (String [] args) public static void {
ArrayList<-Venda&vendas GT- = new ArrayList<> - () -
moeda NumberFormat = NumberFormat.getCurrencyInstance () -
fillTheList (vendas) -
Video: Sem mistério: análise do sinal de expressões de 1º e de 2º graus
total de dupla = sales.stream ()
.filtrar ((venda) -gt; sale.getItem () equals (."DVD"))
.mapa ((venda) -gt; sale.getPrice ())
.reduzir (0,0, (price2 -gt Price1,); Price1 + price2) -
System.out.printlnl (currency.format (total)) -
}
static void fillTheList (ArrayList<-Venda>- vendas) {
sales.add (novo Venda ("DVD", 15.00)) -
sales.add (novo Venda ("Livro", 12,00)) -
sales.add (novo Venda ("DVD", 21.00)) -
sales.add (novo Venda ("CD", 5,25)) -
}
}
O código exige Java 8 ou posterior. Se o seu IDE está definido para uma versão anterior Java, você pode ter que mexer com as configurações do IDE. Você pode mesmo ter que baixar uma versão mais recente do Java.
O negrito é uma grande declaração de atribuição 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 tal objeto é a coisa antes do ponto na chamada do método seguinte. É assim que se formam a linha de montagem.
Por exemplo, perto do início do código em negrito, o nome vendas
refere-se a um ArrayList
objeto. Cada ArrayList
objecto tem um corrente
método. No código acima, sales.stream ()
É um chamado para que ArrayList
objeto de corrente
método.
O método de fluxo retorna uma instância de Java de Corrente
classe. (Que surpresa!) Então, sales.stream ()
refere-se a um Corrente
objeto.
Cada Corrente
objecto tem um filtro
método. assim
Video: Relacionando expressões a intervalos definidos de exemplos de funções
. Sales.stream () filter ((venda) -gt; sale.getItem () equals (."DVD"))
é uma chamada para o Stream
objeto de filtro
método.
O padrão continua. o Corrente
objeto de mapa
método retorna ainda outra Corrente
objeto - uma Corrente
objeto contendo preços.
Para isso Corrente
de preços de aplicar o reduzir
método, que produz um Duplo
valor - o total dos preços de DVD.