Reducción de la corriente de Java

Reducción de la corriente de Java
La API de la corriente de Java cubre innumerables enfoques compatibles con la paralelización, como la reducción y las operaciones terminales. Aquí, exploraremos la operación de reducción de la interfaz de flujo Java que tiene el método Reder (). El método Red () es un proceso que combina todos los elementos. El método Reder () utiliza el operador binario para todos los elementos que se muestran en la transmisión. El primer argumento del operador en ese flujo debe devolver el valor de la aplicación más reciente y el segundo argumento debe devolver el elemento que está actualmente presente en la transmisión.

Ejemplo 1:

La funcionalidad del método Stream Reduce () se puede demostrar fácilmente con el programa Java. La siguiente es la implementación de la operación de reducción utilizando el método Stream Reduce () para obtener la cadena más larga.

importar java.utilizar.*;
clase StreamReduce1
Public static void main (String [] args)

Lista strnames = matrices.Aslist ("String1", "String2", "String3",
"String4", "String5");
Opcional Newstr = Strnames.arroyo().Reducir ((FirstName, SecondName)->
nombre de pila.longitud ()> segundo nombre.longitud()? primer nombre segundo nombre);
periódico.Ifpresent (sistema.out :: println);

Hemos dado una interfaz de lista donde declaramos primero el objeto "STRName" y luego llamamos a las matrices.método aslist (). Las matrices.El método aslist () ingresa el elemento de cadena en el formulario de la lista. Luego, proporcionamos la interfaz de clase "opcional" porque los resultados de la lista pueden contener los valores nulos. Definimos el objeto "periodista" donde se implementa el método Reduce () después de la clase Stream () en los "Strnames". La expresión de lambda se proporciona al método reduce () que ingresa los dos valores de cadena para obtener la cadena más larga. Debido a la posibilidad de que la lista en la que se ejecuta la reducción () puede estar vacía, la salida del método reduce () es opcional. Después de esto, usamos la función de impresión para imprimir el resultado del método Reder ().

La cadena más larga después de la operación de reducción de la operación de reducción de flujo () se obtiene dentro de la salida.

Ejemplo 2:

El método de flujo reduce () también se puede emplear con el acumulador Java. El siguiente programa de origen utiliza el método Reder () con el acumulador para sumar los elementos y encontrar su promedio.

importar java.utilizar.Matrices;
importar java.utilizar.Lista;
clase pública Streamreduce2
public static void main (string [] args)
Lista < Integer > NumbersArray = matrices.Aslist (7, 1, 3, 9, 15);
int Arraysum = 0;
para (int i = 0; i < NumbersArray.size(); i++)
Arraysum += NumbersArray.Consigo);

Sistema.afuera.println ("promedio" + arraysum / numbearray.tamaño());

Generamos la lista de valores numéricos a partir del método de clase de matriz aslist (). La lista se inicializa dentro de la variable "NumbersArray" de la clase de lista. Luego, definimos otra variable que es "AVG" para evaluar el promedio de la lista proporcionada. Invocamos el método stream reduce () dentro de la variable "avg" y establecemos la expresión de lambda como acumulador dentro del método reduce (). El método Reder () toma la "suma" y el "Currvalue" como entrada. Los elementos de la transmisión entera están almacenados por este acumulador. Después de obtener la suma de los elementos de la lista de flujo, obtenemos el promedio dividiendo la suma del elemento por la longitud del tamaño de la lista de enteros.

El promedio de la lista dada de elementos se obtiene utilizando el método Red () con el acumulador.

Ejemplo 3:

El método de flujo reduce () tiene una clase de envoltorio diferente en la que Min y Max son uno de ellos. La siguiente implementación del programa tiene como objetivo obtener los valores máximos de la colección dada de elementos.

importar java.utilizar.Lista de arreglo;
importar java.utilizar.Matrices;
importar java.utilizar.Lista;
clase StreamReduce3

Integer estático público getMaxValue (lista Twodigits)

return twodigits.arroyo()
.Reducir (entero :: max)
.conseguir();

Public static void main (String [] args)

Lista Twodigits = matrices.Aslist (14, 52, 76, 95, 39, 41);
Sistema.afuera.println ("El elemento máximo es" + getMaxValue (twodigits));

Construimos la función getMaxValue dentro de la clase Java. La función getMaxValue () se proporciona con el objeto de parámetro "twodigits". A continuación, usamos la palabra clave de retorno en la función getMaxValue (). Llamamos al método Reder () con la palabra clave de retorno. Al método reduce () se le asigna una referencia de método, el entero :: max.

Después de esto, usamos el método get () después de la operación del método Red () para obtener los resultados esperados. Luego, tenemos un método main () donde el objeto "twodigit" se inicializa con la lista de los elementos enteros. Además, llamamos a la función getMaxValue () en la línea de impresión de Java y pasamos el objeto "twodigit" para generar el valor máximo para la lista de enteros.

Desde la operación máxima predefinida del método reduce (), obtenemos el valor máximo de la lista de algunos valores enteros.

Ejemplo 4:

Hay otro programa de la operación de reducción donde todos los números en un rango específico se multiplican para obtener sus productos utilizando el método Rede ().

importar java.utilizar.*;
importar java.utilizar.arroyo.Intstream;
clase StreamReduce4
Public static void main (String [] args)

int numProduct = intstream.rango (3, 9)
.Reducir ((N1, N2) -> N1 * N2)
.orelse (-1);
Sistema.afuera.println ("producto:" + producto);

Creamos la variable "numProduct" que se establece con el método intStream Class Range (). Los valores de rango se asignan a este método de rango (). También usamos el método Reder () después de especificar el método de rango (). El método Red () se define con la expresión para calcular el producto de "N1" y "N2" dentro del rango en el dado, excepto por el elemento más derecho. El método println () se usa para imprimir el producto del rango de entrada.

El producto de todos los elementos de rango se logra utilizando la técnica de reducción.

Ejemplo 5:

El método Reder () toma un parámetro "combinador" que se utiliza para combinar dos valores. Necesita trabajar con la función del acumulador. Solo las transmisiones paralelas se pueden combinar de manera efectiva a medida que el parámetro combinador combina la salida de todos los subtrames para las transmisiones paralelas.

importar java.utilizar.*;
clase StreamReduce5
Public static void main (String [] args)

String [] ArrValues ​​= "Live", "Long", "Life";
Opcional Combinestring = matrices.Stream (ArrValues)
.reducir ((S1, S2)-> S1 + "-" + S2);
if (combinestring.está presente())
Sistema.afuera.println (combinestring.conseguir());


Tenemos una declaración del objeto de matriz de cadenas, "ArrValues", y la inicializamos con los tres elementos de cadena. Luego, creamos el objeto de clase opcional de "combinar" para combinar los elementos de cadena anteriores. Al objeto "combinador" se le asigna un método stream () que crea la secuencia de la matriz de cadenas dada. Luego, aplicamos el método Reduce () en la secuencia de la matriz de cadenas. El método Reder () luego combina las cadenas "S1" y "S2" con el carácter hash "-" ya que la expresión se establece allí. Después de eso, mostramos los resultados de la cadena combinada empleando la condición if que valida si la cadena combinada está presente o no.

Los elementos de la matriz de cadenas ahora se combinan con el combinador "-" que el método reduce () como parámetro.

Ejemplo 6:

Ahora, el método Reder () y el mapa se implementan dentro de un objeto para obtener la suma de los valores BigDecimal.

importar java.matemáticas.BigDecimal;
importar java.utilizar.Matrices;
importar java.matemáticas.RoundingMode;
importar java.utilizar.Lista;
clase pública Streamreduce6
public static void main (string [] args)
Lista Billlist = matrices.Aslist (
nuevo proyecto de ley ("B26", BigDecimal.valor de (1045), bigDecimal.valor de (2.5)),
nuevo proyecto de ley ("B92", BigDecimal.valor de (1721), BigDecimal.valor de (4)),
nuevo proyecto de ley ("B13", BigDecimal.valor de (2993), BigDecimal.valor de (3.5))
);
BigDecimal Total = BillList.arroyo().
mapa (datos -> datos.getDiscount ().Multiplicar (datos.getamount ())).
reducir (bigdecimal.Cero, bigDecimal :: add);
Sistema.afuera.println (total);


Bill de clase
Cadena billno;
Bigdecimal Billamount;
BigDecimal BillDiscount;
Proyecto de ley público (String Billno, BigDecimal Billamount, BigDecimal BillDiscount)
este.Billno = Billno;
este.Billamount = Billamount;
este.BillDiscount = BillDiscount;

public BigDecimal getamount ()
devolver Billamount;

public BigDecimal getDiscount ()
devolver BillDiscount;

Definimos la interfaz de la lista de la clase "Bill" donde se declara el objeto "BillIst". La "lista de facturas" se establece aún más con el método aslist () donde inicializamos los valores BigDecimal para el campo de la clase "Bill" utilizando la nueva palabra clave. El método valueOf () se implementa para insertar los valores en cada atributo de la clase "Bill". Después de eso, creamos el objeto BigDecimal, "Total", donde el método Stream () se usa para crear la secuencia de los elementos "Lista de facturas".

Luego, los elementos de la secuencia se asignan a través del método map () donde se especifica el método multiplicy () para obtener el producto del método getamount () getter de la clase "factura". El método Reduce () se implementa en los resultados mapeados donde el valor identificado para BigDecimal es cero y el acumulador se establece al dar la referencia BigDecimal :: Agregar método. Los resultados del objeto "total" se muestran donde se realizan la operación del mapa y la operación de reducción. Por último, construimos la clase de envoltorio "Bill" donde se declaran los atributos de cadena Billno, Billamount y BillDiscount.

El programa anterior genera el siguiente valor como el total de las facturas:

Conclusión

El método Red () nos permite crear un solo resultado a partir de una serie de elementos aplicando continuamente la operación de reducción a los elementos de la serie. Usamos la transmisión Java.Reducir () método en los programas de ejemplo de este artículo que reduce los elementos de la corriente. Sin embargo, la transmisión.El método reducir () no es efectivo en las operaciones de reducción mutable, por lo que usarlo con grandes corrientes puede ser un desafío.