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.
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.
Nombre del método | Miembro de | Parámetro (s) | Tipo de resultado | Valor resultado |
corriente | Colección (Por ejemplo, una Lista de arreglo , objeto) | (ninguna) | Corriente | Una corriente que escupe elementos de la colección |
filtrar | Corriente | Predicado | Corriente | Una nueva corriente que contiene valores para los que la expresión lambda rendimientos cierto |
mapa | Corriente | Función | Corriente | Una nueva corriente que contiene los resultados de la aplicación de la expresión lambda a la corriente de entrada |
reducir | Corriente | BinaryOperator | El tipo utilizado por el BinaryOperator | El 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.
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
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
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.
A ese Corriente
de los precios de aplicar el reducir
método, que produce una doble
Valor - la suma de los precios de DVD.