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.

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.

linha de montagem em java
Uma linha de montagem de programação funcional.

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.

Alguns métodos de programação funcional
Nome do métodoMembro deParâmetro (s)Tipo de resultadoresultado Valor
correnteColeção (Por exemplo, uma ArrayList, objeto)(Nenhum)CorrenteUm fluxo que cospe elementos da coleção
filtroCorrentePredicadoCorrenteUm novo fluxo que contém os valores para que a expressão lambda retornos verdade
mapaCorrenteFunçãoCorrenteUm novo fluxo que contém os resultados da aplicação da expressão lambda para o fluxo de entrada
reduzirCorrenteBinaryOperatorO tipo usado pela BinaryOperatorO 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.

java-7e-reduzir-Método
O método de reduzir adiciona dois valores a partir de um fluxo de entrada.

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

multiplicado reduzir método em java
O método de reduzir multiplica os valores a partir de um fluxo de entrada.

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.

objeto de fluxo em java
Recebendo todas as vendas de DVD.

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.

objeto de fluxo com os preços em java
Obtendo o preço de cada venda de DVD.

Para isso Corrente de preços de aplicar o reduzir método, que produz um Duplo valor - o total dos preços de DVD.

fluxo de objeto java preço total
Obtendo o valor total de todas as vendas de DVD.

Publicações relacionadas