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.