Meccsek számlálása egy adatfolyam-szűrőn
1. Áttekintés
Ebben az oktatóanyagban megvizsgáljuk a Stream.count () módszer. Kimondottan, meglátjuk, hogyan tudjuk kombinálni a számol() módszer a szűrő() módszer a Állítmányjelentkeztünk.
2. Használata Stream.count ()
A számol() maga a módszer kicsi, de nagyon hasznos funkcionalitást nyújt. Kiválóan kombinálhatjuk más eszközökkel is, például a Stream.filter ().
Használjuk ugyanazt Vevő osztály, amelyet az oktatóanyagunkban definiáltunk Stream.filter ():
public class Ügyfél {private String name; magán int pontok; // Konstruktor és szabványos szerelvények}
Ezenkívül ugyanazt az ügyfelek gyűjteményét is létrehozzuk:
Vevő john = new Customer ("John P.", 15); Ügyfél sarah = új Ügyfél ("Sarah M.", 200); Ügyfél charles = új Ügyfél ("Charles B.", 150); Vevő mary = új vevő ("Mary T.", 1); Ügyféllista = Arrays.asList (john, sarah, charles, mary);
Ezután jelentkezünk Folyam módszereket a listán a szűréshez és annak meghatározásához, hogy a szűrők hány egyezést kapnak.
2.1. Elemek számlálása
Lássuk a számol():
long count = ügyfelek.stream (). count (); assertThat (count) .isEqualTo (4L);
Vegye figyelembe, hogy számol() visszatér a hosszú érték.
2.2. Használata számol() Val vel szűrő()
Az előző alfejezetben szereplő példa nem volt igazán lenyűgöző. Ugyanarra az eredményre juthattunk volna a List.size () módszer.
Stream.count () akkor ragyog, ha másokkal kombináljuk Folyam módszerek - leggyakrabban azzal szűrő():
long countBigCustomers = customers .stream () .filter (c -> c.getPoints ()> 100) .count (); assertThat (countBigCustomers) .isEqualTo (2L);
Ebben a példában szűrőt alkalmaztunk az ügyfelek listáján, és megszereztük a feltételnek megfelelő ügyfelek számát. Ebben az esetben két ügyfelünk van, több mint 100 ponttal.
Természetesen az is előfordulhat, hogy egyetlen elem sem felel meg a szűrőnknek:
long count = ügyfelek .stream () .filter (c -> c.getPoints ()> 500) .count (); assertThat (count) .isEqualTo (0L);
2.3. Használata számol() Haladó szűrőkkel
A bemutatónkban kb szűrő(), láttunk néhány fejlettebb alkalmazási esetet a módszerről. Természetesen még számolhatjuk az ilyen eredményeket szűrő() tevékenységek.
A gyűjteményeket több szempont alapján is szűrhetjük:
long count = ügyfelek .stream () .filter (c -> c.getPoints ()> 10 && c.getName (). startsWith ("Charles")) .count (); assertThat (count) .isEqualTo (1L);
Itt kiszűrtük és megszámoltuk azoknak az ügyfeleknek a számát, akiknek neve Charles betűvel kezdődik, és akiknek több mint 10 pontjuk van.
Kihúzhatjuk a kritériumokat a saját módszerébe, és felhasználhatjuk a módszer referenciáját:
long count = ügyfelek .stream () .filter (Ügyfél :: hasOverHundredPoints) .count (); assertThat (count) .isEqualTo (2L);
3. Következtetés
Ebben a cikkben láttunk néhány példát a számol() módszer a szűrő() módszer a folyamok feldolgozására. További felhasználási esetekre számol(), nézzen meg más módszereket, amelyek visszaadják a Folyam, például az oktatóanyagunkban bemutatottak a folyamok egyesítéséről a concat ().
Mint mindig, a teljes kód elérhető a GitHubon.