El uso de corrientes y expresiones lambda en java

Java tiene métodos de fantasía que hacen un uso óptimo de las corrientes y expresiones lambda. Con corrientes y expresiones lambda, se puede crear una línea de montaje. La solución de la línea de montaje utiliza conceptos de la programación funcional.

La línea de montaje se compone de varios métodos. Cada método tiene los datos, transforma los datos en una forma u otra, y las manos de sus resultados con el método siguiente en la fila. Aquí está una línea de montaje.

línea de montaje en java
Una línea de montaje de programación funcional.

Cada cuadro representa un grupo de materias primas, ya que está transforman a lo largo de una línea de montaje. Cada flecha representa un método (o, metafóricamente, un trabajador en la línea de montaje).

Por ejemplo, en la transición de la segunda casilla de la tercera caja, un método de obrero (la filtrar Método) tamiza a cabo la venta de artículos que no son DVDs. Imagínese Lucy Ricardo pie entre las cajas de segunda y tercera, la eliminación de cada libro o CD de la línea de montaje y lo arrojó descuidadamente en el suelo.

El parámetro de Java filtrar método es una Predicado - una expresión lambda cuyo resultado es booleano. los filtrar Método tamiza hacia fuera artículos que no pasan la expresión lambda de verdadero Falso prueba.

Algunos métodos de programación funcionales
Nombre del métodoMiembro deParámetro (s)Tipo de resultadoValor resultado
corrienteColección (Por ejemplo, una Lista de arreglo, objeto)(ninguna)CorrienteUna corriente que escupe elementos de la colección
filtrarCorrientePredicadoCorrienteUna nueva corriente que contiene valores para los que la expresión lambda rendimientos cierto
mapaCorrienteFunciónCorrienteUna nueva corriente que contiene los resultados de la aplicación de la expresión lambda a la corriente de entrada
reducirCorrienteBinaryOperatorEl tipo utilizado por el BinaryOperatorEl resultado de la combinación de todos los valores de la corriente de entrada

En la transición de la tercera casilla de la cuarta caja, un método de obrero (la mapa método) tira de la precio de cada uno venta. Desde el lugar de ese trabajador en adelante, la línea de montaje contiene sólo precio valores.

Para ser más precisos, Java mapa método toma una Función como

(Venta) ->- sale.getPrice ()

y aplica el Función para cada valor de una corriente. Entonces el mapa método toma un flujo entrante de venta objetos y crea una corriente de salida de precio valores.

En la transición de la cuarta caja a la quinta caja, un método de obrero (la reducir Método) suma los precios de las ventas de DVD. Java reducir método toma dos parámetros:

El primer parámetro es un valor inicial.

En la imagen anterior, el valor inicial es 0.0.

El segundo parámetro es una BinaryOperator.

En la imagen anterior, la reducir El método de BinaryOperator es

(Price1, price2) -&Gt- price1 + price2

los reducir método utiliza su BinaryOperator para combinar los valores de la corriente entrante. El valor inicial sirve como el punto de partida para toda la combinación. Entonces el reducir método hace dos adiciones.

java-7e-reducir-método
El método de reducir agrega dos valores de una corriente entrante.

A modo de comparación, imaginar una llamada al método

reducir (10.0, (valor1, valor2) -&valor1 valor2 GT- *)

con la corriente cuyos valores incluir 3.0, 2.0, y 5.0. La acción resultante se muestra a continuación

multiplicado reducir el método en Java
El método de reducir multiplica los valores de una corriente entrante.

Es posible que haya oído hablar de modelo de programación MapReduce de Google. La similitud entre el nombre del modelo de programación y los nombres de los métodos Java mapa y reducir No es una coincidencia.

Tomados en su conjunto, toda la línea de montaje de los precios de los DVDs vendidos. El código anterior contiene un programa completo usando las corrientes y expresiones lambda la primera imagen de arriba.

importación java.text.NumberFormat-

Video: Expresiones Lambda Java 8

importación java.util.ArrayList-

TallySales clase pública {

principales (args String []) {public static void

Lista de arreglo<-Sale&ventas GT- = new ArrayList&ntegrada> - (+) -

NumberFormat moneda = NumberFormat.getCurrencyInstance () -

fillTheList (ventas) -

Video: JAVA SE: 001-EXPRESIONES LAMBDA

doble Total = sales.stream ()

.filtrar ((venta) -gt; sale.getItem () es igual a (."DVD"))

.Mapa ((venta) -gt; sale.getPrice ())

.reducir (0.0, (-gt price1, price2); price1 + price2) -

System.out.println (currency.format (total)) -

}

static void fillTheList (ArrayList<-Sale&Gt- ventas) {

sales.add (nuevo Venta ("DVD", 15.00)) -

sales.add (nuevo Venta ("Libro", 12.00)) -

sales.add (nuevo Venta ("DVD", 21.00)) -

sales.add (nuevo Venta ("discos compactos", 5.25)) -

}

}

El código requiere Java 8 o posterior. Si el IDE está configurado para una versión anterior de Java, puede que tenga que jugar con la configuración de la IDE. Usted puede incluso tener que descargar una nueva versión de Java.

La negrita es una gran instrucción de asignación de Java. El lado derecho de la sentencia contiene una secuencia de llamadas a métodos. Cada llamada al método devuelve un objeto, y cada uno de estos objetos es la cosa antes del punto en la siguiente llamada al método. Así es como se formo la línea de montaje.

Por ejemplo, cerca del inicio del código en negrita, el nombre ventas se refiere a una Lista de arreglo objeto. Cada Lista de arreglo objeto tiene una corriente método. En el código anterior, sales.stream () es una llamada a ese Lista de arreglo objetos corriente método.

El método corriente devuelve una instancia de Java Corriente clase. (Qué sorpresa!) Así sales.stream () se refiere a una Corriente objeto.

Video: Java 8 Tutorial - 3 Sintaxis Lambda

objeto de secuencia en java
Conseguir todas las ventas de DVD.

Cada Corriente objeto tiene una filtrar método. Asi que

. Sales.stream () filter⁣ ((venta) -gt; sale.getItem () es igual a (."DVD"))

es una llamada a la ⁣Stream objetos filtrar método.

El patrón continúa. los Corriente objetos mapa método devuelve otra Corriente objeto - una Corriente oponerse precios contienen.

Los objetos de secuencia con los precios en java
Obtener el precio de cada venta de DVD.

A ese Corriente de los precios de aplicar el reducir método, que produce una doble Valor - la suma de los precios de DVD.

corriente objeto java precio total
Obtener el precio total de todas las ventas de DVD.
Artículos Relacionados