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.