Java Null-Safe adatfolyamok a gyűjteményekből
1. Áttekintés
Ebben az oktatóanyagban megtudhatjuk, hogyan lehet null-biztonságos adatfolyamokat létrehozni a Java-gyűjteményekből.
Első lépésként a Java 8 Method References, Lambda Expressions, Választható és a Stream API-ra van szükség az anyag teljes megértéséhez.
Ha nem ismeri ezeket a témákat, kérjük, először nézze meg korábbi cikkeinket: Új szolgáltatások a Java 8-ban, Útmutató a Java 8 opcionálishoz és Bevezetés a Java 8-adatfolyamokba.
2. Maven-függőség
Mielőtt elkezdenénk, van egy Maven-függőség, amelyre bizonyos esetekben szükségünk lesz:
org.apache.commons commons-gyűjtemények4 4.2
A commons-gyűjtemények4 könyvtár letölthető a Maven Central oldalról.
3. Patakok létrehozása gyűjteményekből
Az alapvető megközelítés a Folyam bármilyen típusú Gyűjtemény hívni a folyam() vagy parallelStream () módszerek a gyűjteményen, a szükséges adatfolyam típusától függően:
Gyűjteménygyűjtemény = Arrays.asList ("a", "b", "c"); Stream streamOfCollection = collection.stream ();
Gyűjteményünknek valószínűleg valamikor lesz külső forrása, valószínűleg az alábbihoz hasonló módszerrel fogunk végezni, amikor streameket hozunk létre gyűjteményekből:
public Stream collectionAsStream (Collection collection) {return collection.stream (); }
Ez problémákat okozhat. Amikor a megadott gyűjtés a nulla hivatkozás, a kód dob a NullPointerException futás közben.
A következő szakasz arról szól, hogyan védekezhetünk ez ellen.
4. A létrehozott gyűjtemény-adatfolyamok semmissé tétele
4.1. Ellenőrzések hozzáadása a megelőzéshez Nulla Dereferenciák
A nem szándékos megelőzés érdekében nulla mutató kivételek, választhatunk az ellenőrzések hozzáadásával a megelőzés érdekében nulla hivatkozások adatfolyamok létrehozásakor gyűjteményekből:
AsStream (gyűjtemény gyűjtemény) {return collection == null? Stream.empty (): gyűjtemény.stream (); }
Ennek a módszernek azonban van pár kérdése.
Először is a nulla a csekk akadályozza az üzleti logikát, ami csökkenti a program általános olvashatóságát.
Másodszor, a használata nulla az érték hiányának ábrázolása a Java SE 8 utáni téves megközelítésnek számít: Van egy jobb módszer az érték hiányának és jelenlétének modellezésére.
Fontos szem előtt tartani, hogy egy üres Gyűjtemény nem ugyanaz, mint a nullaGyűjtemény. Míg az első azt jelzi, hogy a lekérdezésünknek nincsenek megjelenítendő eredményei vagy elemei, a második arra utal, hogy egyfajta hiba történt éppen a folyamat során.
4.2. Használat emptyIfNull Módszer a CollectionUtils Könyvtár
Választhatjuk az Apache Commons használatát CollectionUtils könyvtár, hogy megbizonyosodjon arról, hogy a mi adatfolyam nulla biztonságos. Ez a könyvtár egy emptyIfNull módszer, amely egy megváltoztathatatlan üres gyűjteményt ad vissza, adott a nulla a gyűjtemény mint érv, vagy maga a gyűjtemény egyébként:
public Stream collectionAsStream (Collection collection) {return emptyIfNull (gyűjtemény) .stream (); }
Ez egy nagyon egyszerű stratégia, amelyet elfogadni kell. Ez azonban egy külső könyvtár függvénye. Ha egy szoftverfejlesztési házirend korlátozza az ilyen könyvtár használatát, akkor ez a megoldás megjelenik nulla és semmis.
4.3. Használja a Java 8-kat Választható
Java SE 8-k Választható egyértékű tároló, amely vagy tartalmaz értéket, vagy nem. Ahol hiányzik egy érték, az Választható a tartály állítólag üres.
Használata Választható vitathatatlanul a legjobb átfogó stratégiának tekinthető a semmiből biztonságos gyűjtemény létrehozására egy adatfolyamból.
Lássuk, hogyan tudjuk használni, majd az alábbiakban egy gyors beszélgetést folytatunk:
public Stream collectionToStream (Collection collection) {return Optional.ofNullable (collection) .map (Collection :: stream) .orElseGet (Stream :: empty); }
- Opcionális.ofNullable (gyűjtemény) létrehoz egy Választható tárgy az átengedett gyűjteményből. Egy üres Választható objektum jön létre, ha a gyűjtemény nulla.
- térkép (Gyűjtemény :: patak) kivonja a Választható objektum mint argumentum a térkép módszer (Collection.stream ())
- orElseGet (Stream :: üres) visszatérési értéket ad vissza abban az esetben, ha a Választható az objektum üres, vagyis az átadott gyűjtemény az nulla.
Ennek eredményeként proaktív módon védjük a kódunkat a nem szándékoltaktól nulla mutató kivételek.
4.4. Használja a Java 9-eket FolyamOfNullable
A 4.1. Szakasz korábbi, háromszögű példáját vizsgálva. és néhány elem lehetőségének mérlegelése lehet nulla a helyett Gyűjtemény, rendelkezésünkre áll a ofNullable módszer a Folyam osztály.
Átalakíthatjuk a fenti mintát:
Stream collectionAsStream (Collection collection) {return collection.stream (). FlatMap (s -> Stream.ofNullable (s)); }
5. Következtetés
Ebben a cikkben röviden áttekintettük, hogyan hozhatunk létre adatfolyamot egy adott gyűjteményből. Ezután felfedeztük a három kulcsfontosságú stratégiát annak biztosítására, hogy a létrehozott folyam semmilyen biztonságban legyen, ha gyűjteményből készült.
Végül rámutattunk az egyes stratégiák adott esetben történő alkalmazásának gyengeségére.
Szokás szerint a cikket kísérő teljes forráskód elérhető a GitHubon.