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.


$config[zx-auto] not found$config[zx-overlay] not found