Tælle matches på et streamfilter

1. Oversigt

I denne vejledning undersøger vi brugen af Stream.count () metode. Specifikt vi får se, hvordan vi kan kombinere tælle() metode med filter() metode til at tælle kampene til en Prædikatvi har ansøgt.

2. Brug Stream.count ()

Det tælle() selve metoden giver en lille, men meget nyttig funktionalitet. Vi kan også kombinere det fremragende med andre værktøjer, for eksempel med Stream.filter ().

Lad os bruge det samme Kunde klasse, som vi definerede i vores vejledning til Stream.filter ():

offentlig klasse kunde {privat strengnavn; private int-punkter; // Constructor og standard getters}

Derudover opretter vi også den samme samling af kunder:

Kunde john = ny kunde ("John P.", 15); Kundesarah = ny kunde ("Sarah M.", 200); Customer charles = ny kunde ("Charles B.", 150); Kundemary = ny kunde ("Mary T.", 1); Liste kunder = Arrays.asList (john, sarah, charles, mary);

Dernæst ansøger vi Strøm metoder på listen for at filtrere det og bestemme, hvor mange matches vores filtre får.

2.1. Tælleelementer

Lad os se den meget grundlæggende brug af tælle():

lang optælling = kunder. stream (). antal (); assertThat (count) .isEqualTo (4L);

Noter det tælle() returnerer a lang værdi.

2.2. Ved brug af tælle() Med filter()

Eksemplet i det foregående underafsnit var ikke rigtig imponerende. Vi kunne være kommet til det samme resultat med List.size () metode.

Stream.count () skinner virkelig, når vi kombinerer det med andre Strøm metoder - oftest med filter():

lang countBigCustomers = kunder .stream () .filter (c -> c.getPoints ()> 100) .count (); assertThat (countBigCustomers) .isEqualTo (2L);

I dette eksempel har vi anvendt et filter på listen over kunder, og vi har også fået antallet af kunder, der opfylder betingelsen. I dette tilfælde har vi to kunder med mere end 100 point.

Selvfølgelig kan det også ske, at intet element matcher vores filter:

lang optælling = kunder .stream () .filter (c -> c.getPoints ()> 500). antal (); assertThat (count) .isEqualTo (0L); 

2.3. Ved brug af tælle() Med avancerede filtre

I vores vejledning om filter(), så vi nogle mere avancerede brugssager af metoden. Naturligvis kan vi stadig tælle resultatet af sådan filter() operationer.

Vi kan filtrere samlinger med flere kriterier:

lang optælling = kunder .stream () .filter (c -> c.getPoints ()> 10 && c.getName (). startsWith ("Charles")) .count (); assertThat (count) .isEqualTo (1L);

Her filtrerede vi og tællede antallet af kunder, hvis navne starter med "Charles", og som har mere end 10 point.

Vi kan også udtrække kriterierne i sin egen metode og bruge metodehenvisning:

langt antal = kunder .stream () .filter (kunde :: hasOverHundredPoints) .count (); assertThat (count) .isEqualTo (2L);

3. Konklusion

I denne artikel så vi nogle eksempler på, hvordan du bruger tælle() metode i kombination med filter() metode til behandling af streams. Til yderligere brugssager af tælle(), tjek andre metoder, der returnerer a Strøm, som dem, der er vist i vores vejledning om fletning af streams med concat ().

Som altid er den komplette kode tilgængelig på GitHub.


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