Számok összegzése Java adatfolyamokkal

1. Bemutatkozás

Ebben a gyors bemutatóban bemutatjuk a különböző módjait az egész számok összegének kiszámítása,a Stream API használatával.

Az egyszerűség kedvéért példáinkban egész számokat fogunk használni. Ugyanakkor alkalmazhatjuk ugyanazokat a módszereket a hosszú és a kettősre is.

2. Használata Stream.reduce ()

Stream.reduce () egy terminál művelet, amelyredukciót hajt végre a patak elemein.

Bináris operátort (akkumulátort) alkalmaz a stream minden elemére, ahol az első operandus az előző alkalmazás visszatérési értéke, a második pedig az aktuális stream elem.

A. Használatának első módszerében csökkenteni () módszer szerint az akkumulátor függvény egy lambda kifejezés, amely kettőt ad hozzá Egész szám értékeket ad vissza és ad vissza Egész szám érték:

Egész számok = tömbök. AsList (1, 2, 3, 4, 5); Egész szám = egész számok.stream (). Reduce (0, (a, b) -> a + b);

Ugyanígy használhatunk egy már létező Java módszer:

Egész számok = tömbök. AsList (1, 2, 3, 4, 5); Egész szám = integers.stream () .reduce (0, Integer :: összeg);

Vagy meghatározhatjuk és használhatjuk az egyéni módszerünket:

public class ArithmeticUtils {public static int add (int a, int b) {return a + b; }} 

Ezután paraméterként átadhatjuk ezt a függvényt a csökkenteni () módszer:

Egész számok = tömbök. AsList (1, 2, 3, 4, 5); Egész szám = integers.stream () .reduce (0, ArithmeticUtils :: add); 

3. Használata Stream.collect ()

Az egész számok listájának összegének kiszámításához a második módszer a gyűjt() terminál működése:

Egész számok = tömbök. AsList (1, 2, 3, 4, 5); Egész szám = integers.stream () .collect (Collectors.summingInt (Integer :: intValue));

Hasonlóképpen a Gyűjtők osztály biztosítja summingLong () és summingDouble () módszerek a hosszúságok és a duplák összegének kiszámításához.

4. Használata IntStream.sum ()

A Stream API biztosítja nekünk a mapToInt () közbenső művelet, amely átalakítja az adatfolyamunkat egy IntStream tárgy.

Ez a módszer egy leképezőt vesz paraméterként, amelyet az átalakításhoz használ, majd hívhatjuk a összeg() módszer az adatfolyam összegének kiszámításához.

Lássunk egy gyors példát arra, hogyan használhatjuk:

Egész számok = tömbök. AsList (1, 2, 3, 4, 5); Egész szám = integers.stream () .mapToInt (Integer :: intValue) .sum ();

Ugyanígy használhatjuk a mapToLong () és mapToDouble () módszerek a hosszúságok és a duplák összegének kiszámításához.

5. Használata Stream # összeg val vel Térkép

Az a értékek összegének kiszámításához Térkép adatstruktúra, először is létrehozunk egy patak az értékekből annak Térkép, akkor alkalmazzuk a korábban használt módszerek egyikét.

Például a IntStream.sum ():

Egész szám = map.values ​​() .stream () .mapToInt (Integer :: valueOf) .sum ();

6. Használata Stream # összeg objektumokkal

Képzeljük el, hogy van egy objektumlistánk, és ki akarjuk számolni egy adott mező összes értékének összege ezen tárgyak közül.

Például:

public class Item {private int id; privát Egész ár; public Item (int id, Integer price) {this.id = id; ez.ár = ár; } // Normál mérőeszközök és beállítók} 

Ezután képzeljük el, hogy ki akarjuk számolni a következő lista összes elemének teljes árát:

Item item1 = új tétel (1, 10); 2. tétel = új tétel (2, 15); 3. tétel = új tétel (3., 25.); 4. tétel = új tétel (4, 40); List elemek = tömbök.asList (1. tétel, 2. tétel, 3. tétel, 4. tétel);

Ebben az esetben az összeg kiszámításához az előző példákban bemutatott módszerekkel meg kell hívnunk a térkép() módszer hogy adatfolyamunkat egész számokká alakítsuk át.

Ennek eredményeként használhatjuk Stream.reduce (), Stream.collect (), és IntStream.sum () az összeg kiszámításához:

Egész szám = item.stream () .map (x -> x.getPrice ()) .reduce (0, ArithmeticUtils :: add); 
Egész szám = item.stream () .map (x -> x.getPrice ()) .reduce (0, Integer :: összeg);
Egész szám = item.stream () .map (item -> item.getPrice ()) .reduce (0, (a, b) -> a + b);
Egész szám = items.stream () .map (x -> x.getPrice ()) .collect (Collectors.summingInt (Integer :: intValue));
items.stream () .mapToInt (x -> x.getPrice ()) .sum ();

7. Használata Stream # összeg val vel Húr

Tegyük fel, hogy van egy Húr néhány egész számot tartalmazó objektum.

Ezen egész számok összegének kiszámításához először is szükségünk van ennek megtérítésére Húr egy an Sor, akkor szükségünk van hogy kiszűrje a nem egész elemeket, és végül, konvertálja a többi elemet ennek a tömbnek a száma.

Nézzük meg ezeket a lépéseket működés közben:

Karaktersorozat = "Cikk1 10 Cikk2 25 Cikk3 30 Cikk4 45"; Egész szám = Tömbök.stream (string.split ("")) .szűrő (s) -> s.matches ("\ d +")) .mapToInt (Integer :: valueOf) .sum ();

8. Következtetés

Ebben az oktatóanyagban számos módszert láthattunk arra vonatkozóan, hogyan lehet kiszámolni az egész számok listájának összegét a Stream API használatával. Ezekkel a módszerekkel kiszámítottuk az objektumlista egy adott mezőjének értékeit, a térkép értékeinek összegét, valamint az adott számban szereplő számokat Húr tárgy.

Mint mindig, a teljes kód elérhető a GitHubon.