Le flux Java réduit

Le flux Java réduit
L'API Java Stream couvre d'innombrables approches compatibles de parallélisation telles que la réduction et les opérations terminales. Ici, nous explorerons le fonctionnement de réduction de l'interface Java Stream qui a la méthode Reduce (). La méthode Reduce () est un processus qui combine tous les éléments. La méthode Reduce () utilise l'opérateur binaire pour tous les éléments affichés dans le flux. Le premier argument de l'opérateur dans ce flux doit renvoyer la valeur de l'application la plus récente et le deuxième argument doit renvoyer l'élément qui est actuellement présent dans le flux.

Exemple 1:

La fonctionnalité de la méthode réduit () peut être facilement démontrée avec le programme Java. Ce qui suit est la mise en œuvre de l'opération de réduction à l'aide de la méthode Stream Reduce () pour obtenir la chaîne plus longue.

Importer Java.user.*
classe StreamReduce1
public static void main (String [] args)

Liste strNames = tableaux.aslist ("string1", "string2", "string3",
"String4", "String5");
Facultatif newstr = strNames.flux().Réduire ((FirstName, SecondName) ->
prénom.Length ()> SecondName.longueur()? FirstName: SecondName);
newr.ifpresent (système.out :: println);

Nous avons donné une interface de liste où nous déclarons d'abord l'objet «strname», puis appelons les tableaux.Méthode ASSList (). Les tableaux.La méthode asslist () entre l'élément de chaîne sous la forme de la liste. Ensuite, nous fournissons l'interface de classe «facultative» car les résultats de la liste peuvent contenir les valeurs nulles. Nous définissons l'objet «newrt» où la méthode Reduce () est déployée après la classe Stream () sur les «StrNames». L'expression lambda est fournie à la méthode Reduce () qui saisit les deux valeurs de chaîne pour obtenir la chaîne plus longue. En raison de la possibilité que la liste sur laquelle la réduction () est exécutée puisse être vide, la sortie de la méthode Reduce () est facultative. Après cela, nous utilisons la fonction d'impression pour imprimer le résultat de la méthode Reduce ().

La chaîne la plus longue après l'opération de réduction de l'opération de réduction du flux () est récupérée à l'intérieur de la sortie.

Exemple 2:

La méthode de réduction () du flux peut également être utilisée avec l'accumulateur Java. Le programme source suivant utilise la méthode Reduce () avec l'accumulateur pour résumer les éléments et trouver leur moyenne.

Importer Java.user.Tableaux;
Importer Java.user.Liste;
classe publique StreamReduce2
public static void main (String [] args)
Liste < Integer > NombresArray = tableaux.aslist (7, 1, 3, 9, 15);
int arraysum = 0;
pour (int i = 0; i < NumbersArray.size(); i++)
Arraysum + = NumbersArray.obtenir (i);

Système.dehors.println ("moyen" + array.taille());

Nous générons la liste des valeurs numériques à partir de la méthode de classe de table ASSList (). La liste est initialisée dans la variable «nombresRray» de la classe de liste. Ensuite, nous définissons une autre variable qui est «avg» pour évaluer la moyenne de la liste fournie. Nous invoquons la méthode Stream Reduce () à l'intérieur de la variable «AVG» et définissons l'expression de lambda en tant qu'accumulateur à l'intérieur de la méthode Reduce (). La méthode Reduce () prend la «somme» et la «currvalue» comme entrée. Les éléments du flux entier sont tous stockés par cet accumulateur. Après avoir obtenu la somme des éléments de liste de flux, nous obtenons la moyenne en divisant la somme de l'élément par la longueur de la taille de la liste des entiers.

La moyenne de la liste des éléments donnée est obtenue en utilisant la méthode Reduce () avec l'accumulateur.

Exemple 3:

La méthode Stream Reduce () a une classe d'emballage différente dans laquelle Min et Max sont l'un d'eux. La mise en œuvre suivante du programme vise à obtenir les valeurs maximales de la collecte donnée d'éléments.

Importer Java.user.Liste des tableaux;
Importer Java.user.Tableaux;
Importer Java.user.Liste;
classe StreamReduce3

entier statique public getMaxValue (liste Twodigits)

Retour Twodigits.flux()
.réduire (entier :: max)
.obtenir();

public static void main (String [] args)

Liste Twodigits = tableaux.Aslist (14, 52, 76, 95, 39, 41);
Système.dehors.println ("L'élément maximum est" + getMaxValue (twodigits));

Nous construisons la fonction getMaxValue à l'intérieur de la classe Java. La fonction getMaxValue () est fournie avec l'objet de paramètre «twodigits». Ensuite, nous utilisons le mot clé de retour dans la fonction getMaxValue (). Nous appelons la méthode Reduce () avec le mot-clé de retour. La méthode Reduce () se voit attribuer une référence de méthode, l'intégralité :: max.

Après cela, nous utilisons la méthode get () après l'opération de méthode réduction () pour obtenir les résultats attendus. Ensuite, nous avons une méthode Main () où l'objet «TwoDigit» est initialisé avec la liste des éléments entiers. De plus, nous appelons la fonction getMaxValue () dans la ligne d'impression du java et passer l'objet "Twodigit" pour générer la valeur maximale de la liste des entiers.

À partir de l'opération maximale prédéfinie de la méthode Reduce (), nous obtenons la valeur maximale de la liste de certaines valeurs entières.

Exemple 4:

Il existe un autre programme de l'opération de réduction où tous les nombres dans une plage spécifique sont multipliés pour obtenir leurs produits en utilisant la méthode Reduce ().

Importer Java.user.*
Importer Java.user.flux.Intstream;
classe StreamReduce4
public static void main (String [] args)

int numproduct = intstream.gamme (3, 9)
.réduire ((n1, n2) -> n1 * n2)
.Orelse (-1);
Système.dehors.println ("produit:" + produit);

Nous créons la variable «Numproduct» qui est définie avec la méthode IntStream Class Range (). Les valeurs de plage sont affectées à cette méthode de plage (). Nous utilisons également la méthode Reduce () après avoir spécifié la méthode Range (). La méthode Reduce () est définie avec l'expression pour calculer le produit du «N1» et «N2» dans la plage dans le cadre donné, sauf pour l'élément le plus à droite. La méthode println () est ensuite utilisée pour imprimer le produit de la plage d'entrée.

Le produit de tous les éléments de plage est réalisé en utilisant la technique de réduction.

Exemple 5:

La méthode Reduce () prend un paramètre «combiner» qui est utilisé pour combiner deux valeurs. Il doit fonctionner avec la fonction de l'accumulateur. Seuls les flux parallèles peuvent être combinés efficacement car le paramètre combiner combine la sortie de tous les sous-flux pour les flux parallèles.

Importer Java.user.*
classe StreamReduce5
public static void main (String [] args)

String [] Arrvalues ​​= "Live", "Long", "Life";
Facultatif Combinestring = tableaux.Stream (Arrvalues)
.Réduire ((S1, S2) -> S1 + "-" + S2);
if (combinestring.est présent())
Système.dehors.println (Combinestring.obtenir());


Nous avons une déclaration de l'objet de tableau de chaînes, «Arrvalues», et nous l'initialisons avec les trois éléments de chaîne. Ensuite, nous créons l'objet de classe «Combinestring» facultatif pour combiner les éléments de chaîne précédents. L'objet «Combinestring» se voit attribuer une méthode Stream () qui crée le flux du tableau de chaîne donné. Ensuite, nous appliquons la méthode Reduce () sur le flux du tableau des chaînes. La méthode Reduce () combine ensuite les chaînes «S1» et «S2» avec le caractère de hachage «-» puisque l'expression est définie là. Après cela, nous affichons les résultats de la chaîne combinés en utilisant la condition IF qui valide si la chaîne combinée est présente ou non.

Les éléments de tableau des chaînes sont maintenant combinés avec le combiner «-» que la méthode réduction () en tant que paramètre.

Exemple 6:

Maintenant, la méthode Reduce () et la carte sont toutes deux déployées dans un objet pour obtenir la somme des valeurs BigDecimal.

Importer Java.mathématiques.BigDecimal;
Importer Java.user.Tableaux;
Importer Java.mathématiques.Rouningmode;
Importer Java.user.Liste;
classe publique StreamReduce6
public static void main (String [] args)
Liste Liste de billets = tableaux.aslist (
Nouveau Bill ("B26", BigDecimal.Valeur (1045), BigDecimal.valeur de (2.5)),
Nouveau projet de loi ("B92", BigDecimal.Valeur (1721), BigDecimal.valeur de (4)),
New Bill ("B13", BigDecimal.valeur de (2993), bigdecimal.valeur de (3.5))
));
BigDecimal Total = Billlist.flux().
Carte (données -> données.getDiscount ().multiplier (données.getAmount ())).
Réduire (BigDecimal.Zéro, bigdecimal :: ajouter);
Système.dehors.println (total);


classe Bill
String Billno;
Bigdecimal Billamount;
Bigdecimal Billdiscount;
Public Bill (String Billno, Bigdecimal Billamount, BigDecimal BillDiscount)
ce.Billno = Billno;
ce.BilAmount = BilAmount;
ce.BillDiscount = BillDiscount;

public bigdecimal getamount ()
retour BilAmount;

public bigdecimal getDiscount ()
retour BillDiscount;

Nous définissons l'interface de liste pour la classe «Bill» où l'objet «Billlist» est déclaré. La «liste de billet» est en outre définie avec la méthode ASSList () où nous initialisons les valeurs BigDecimal pour le champ de la classe «Bill» en utilisant le nouveau mot-clé. La méthode de valeur de () est déployée pour insérer les valeurs par rapport à chaque attribut de la classe «Bill». Après cela, nous créons l'objet BigDecimal, «Total», où la méthode Stream () est utilisée pour créer le flux des éléments «Billlist».

Ensuite, les éléments de flux sont mappés via la méthode map () où la méthode multiply () est spécifiée pour obtenir le produit de la méthode GetAmount () Getter de la classe «Bill». La méthode Reduce () est déployée sur les résultats mappés où la valeur identifiée pour BigDecimal est nul et l'accumulateur est défini en donnant au BigDecimal :: Ajouter une référence de la méthode. Les résultats de l'objet «total» sont affichés où l'opération de la carte et l'opération de réduction sont effectuées. Enfin, nous construisons la classe de wrapper «Bill» où les attributs de Billno, BilAmount et BillDiscount sont déclarés.

Le programme précédent publie la valeur suivante comme le total des factures:

Conclusion

La méthode Reduce () nous permet de créer un seul résultat à partir d'une série d'éléments en appliquant continuellement l'opération de réduction aux éléments de la série. Nous avons utilisé le flux java.Réduisez () Méthode dans les exemples de programmes de cet article qui réduisent les éléments de flux. Cependant, le flux.La méthode réduit () n'est pas efficace dans les opérations de réduction mutables, donc l'utiliser avec de grands flux peut être difficile.