A Java 8 Streams peek () API

1. Bemutatkozás

A Java Stream API bevezet egy hatékony alternatívát az adatok feldolgozásához.

Ebben a rövid bemutatóban a következőkre fogunk összpontosítani kandikál(), gyakran félreértett módszer.

2. Gyors példa

Piszkoljuk be a kezünket, és próbáljuk meg használni kandikál(). Van egy névfolyamunk, és ki akarjuk nyomtatni őket a konzolra.

Mivel kandikál() elvárja a Fogyasztó egyetlen érvként megfelelőnek tűnik, ezért próbáljuk ki:

Stream nameStream = Stream.of ("Alice", "Bob", "Chuck"); nameStream.peek (System.out :: println);

A fenti részlet azonban nem eredményez kimenetet. Hogy megértsük, miért, frissítsünk gyorsan a stream életciklusának egyes aspektusairól.

3. Közbenső és terminál műveletek

Emlékezzünk vissza arra, hogy az adatfolyamoknak három részből áll: adatforrás, nulla vagy több közbenső művelet és nulla vagy egy terminál művelet.

A forrás biztosítja a csővezeték elemeit.

A köztes műveletek egyesével kapják meg az elemeket és dolgozzák fel azokat. Minden közbenső művelet lusta, és ennek következtében egyetlen műveletnek sincs hatása, amíg a csővezeték nem kezd működni.

A terminálműveletek a folyam életciklusának végét jelentik. Ami a forgatókönyvünk szempontjából a legfontosabb: ők kezdeményezze a folyamatban lévő munkát.

4. kandikál() Használat

Az OK kandikál() az első példánkban nem működött ez egy közbülső műveletet, és nem alkalmaztuk a terminál művelet a csővezetékig. Alternatív megoldásként felhasználhattuk volna az egyes() ugyanazzal az érvvel a kívánt viselkedés eléréséhez:

Stream nameStream = Stream.of ("Alice", "Bob", "Chuck"); nameStream.forEach (System.out :: println);

kandikál()A Javadoc oldalán ez áll:Ez a módszer főként a hibakeresés támogatására szolgál, ahol meg akarja tekinteni az elemeket, amint azok elhaladnak a folyamat egy bizonyos pontján“.

Nézzük meg ezt a részletet ugyanarról a Javadoc oldalról:

Stream.of ("egy", "kettő", "három", "négy"). Szűrő (e -> e.hossz ()> 3) .peek (e -> System.out.println ("Szűrt érték: "+ e)) .map (String :: toUpperCase) .peek (e -> System.out.println (" Hozzárendelt érték: "+ e)) .collect (Collectors.toList ());

Bemutatja, hogyan figyeljük meg az egyes műveleteken átesett elemeket.

Az egésznek a tetejébe, kandikál() hasznos lehet egy másik forgatókönyv esetén: mikor egy elem belső állapotát meg akarjuk változtatni. Tegyük fel például, hogy minden felhasználó nevét kisbetűvé akarjuk alakítani, mielőtt kinyomtatnánk:

Stream userStream = Stream.of (új felhasználó ("Alice"), új felhasználó ("Bob"), új felhasználó ("Chuck")); userStream.peek (u -> u.setName (u.getName (). toLowerCase ())) .forEach (System.out :: println);

Alternatív megoldásként felhasználhattuk volna térkép(), de kandikál() kényelmesebb, mivel nem akarjuk cserélni az elemet.

5. Következtetés

Ebben a rövid bemutatóban összefoglaltuk az adatfolyam életciklusát, hogy megértsük, hogyan kandikál() művek. Két mindennapi használati esetet is láttunk a használat során kandikál() a legegyszerűbb lehetőség.

És mint általában, a példák elérhetők a GitHub-on.


$config[zx-auto] not found$config[zx-overlay] not found