Počítanie zhôd na filtri streamu
1. Prehľad
V tomto výučbe sa budeme venovať použitiu Stream.count () metóda. Konkrétne uvidíme, ako dokážeme kombinovať count () metóda s filter () metóda na počítanie zápasov a Predikátpodali sme žiadosť.
2. Pomocou Stream.count ()
The count () Samotná metóda poskytuje malú, ale veľmi užitočnú funkciu. Môžeme ho vynikajúco kombinovať aj s inými nástrojmi, napríklad s Stream.filter ().
Použime to isté Zákazník triedy, ktorú sme definovali v našom výučbe pre Stream.filter ():
public class Customer {private String name; súkromné int body; // Konštruktor a štandardné getre}
Okrem toho tiež vytvárame rovnakú kolekciu zákazníkov:
Zákazník john = nový zákazník („John P.“, 15); Zákazník sarah = nový zákazník („Sarah M.“, 200); Charles charles = nový zákazník („Charles B.“, 150); Zákazníčka mary = nová zákazníčka („Mary T.“, 1); Zoznam zákazníkov = Arrays.asList (john, sarah, charles, mary);
Ďalej sa prihlásime Prúd metódy na zozname na jeho filtrovanie a určenie počtu zhôd, ktoré naše filtre získajú.
2.1. Počítanie prvkov
Pozrime sa na úplne základné použitie count ():
long count = customers.stream (). count (); assertThat (count) .isEqualTo (4L);
Poznač si to count () vracia a dlho hodnotu.
2.2. Použitím count () S filter ()
Príklad v predchádzajúcej podsekcii nebol skutočne pôsobivý. K rovnakému výsledku sme mohli dospieť aj pri List.size () metóda.
Stream.count () naozaj svieti, keď ho kombinujeme s inými Prúd metódy - najčastejšie s filter ():
long countBigCustomers = customers .stream () .filter (c -> c.getPoints ()> 100) .count (); assertThat (countBigCustomers) .isEqualTo (2L);
V tomto príklade sme použili filter na zoznam zákazníkov a tiež sme získali počet zákazníkov, ktorí splnia danú podmienku. V tomto prípade máme dvoch zákazníkov s viac ako 100 bodmi.
Samozrejme sa tiež môže stať, že nášmu filtru nezodpovedá žiadny prvok:
long count = customers .stream () .filter (c -> c.getPoints ()> 500) .count (); assertThat (count) .isEqualTo (0L);
2.3. Použitím count () S pokročilými filtrami
V našom návode o filter (), videli sme niekoľko pokročilejších prípadov použitia tejto metódy. Samozrejme, môžeme stále počítať výsledok takéhoto filter () operácie.
Kolekcie môžeme filtrovať podľa viacerých kritérií:
long count = customers .stream () .filter (c -> c.getPoints ()> 10 && c.getName (). startsWith ("Charles")) .count (); assertThat (count) .isEqualTo (1L);
Tu sme filtrovali a spočítali počet zákazníkov, ktorých mená začínajú na „Charles“ a ktorí majú viac ako 10 bodov.
Kritériá môžeme tiež extrahovať do vlastnej metódy a použiť odkaz na metódu:
long count = customers .stream () .filter (Customer :: hasOverHundredPoints) .count (); assertThat (count) .isEqualTo (2L);
3. Záver
V tomto článku sme videli niekoľko príkladov, ako používať count () metóda v kombinácii s filter () metóda na spracovanie prúdov. Pre ďalšie prípady použitia count (), pozrite sa na ďalšie metódy, ktoré vracajú a Prúd, ako sú napríklad tie, ktoré sú uvedené v našom výučbe o zlúčení streamov s concat ().
Celý kód je ako vždy k dispozícii na stránkach GitHub.