Telle treff på et strømfilter

1. Oversikt

I denne veiledningen vil vi utforske bruken av Stream.count () metode. Nærmere bestemt, vi får se hvordan vi kan kombinere telle() metoden med filter() metode for å telle fyrstikkene til en Predikerevi har søkt.

2. Bruke Stream.count ()

De telle() selve metoden gir en liten, men veldig nyttig funksjonalitet. Vi kan også kombinere det utmerket med andre verktøy, for eksempel med Stream.filter ().

La oss bruke det samme Kunde klasse som vi definerte i vår veiledning for Stream.filter ():

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

I tillegg lager vi også den samme samlingen av kunder:

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

Deretter søker vi Strøm metoder på listen for å filtrere den og bestemme hvor mange treff filtrene våre får.

2.1. Telleelementer

La oss se den helt grunnleggende bruken av telle():

lang telling = kunder. strøm (). telling (); assertThat (count) .isEqualTo (4L);

Noter det telle() returnerer a lang verdi.

2.2. Ved hjelp av telle() Med filter()

Eksemplet i forrige underavsnitt var ikke veldig imponerende. Vi kunne ha kommet til 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 eksemplet har vi brukt et filter på listen over kunder, og vi har også fått antall kunder som oppfyller vilkåret. I dette tilfellet har vi to kunder med mer enn 100 poeng.

Selvfølgelig kan det også skje at ingen elementer samsvarer med filteret vårt:

lang telling = kunder .stream () .filter (c -> c.getPoints ()> 500). count (); assertThat (count) .isEqualTo (0L); 

2.3. Ved hjelp av telle() Med avanserte filtre

I vår veiledning om filter(), så vi noen mer avanserte bruksområder av metoden. Selvfølgelig kan vi fortsatt telle resultatet av slikt filter() operasjoner.

Vi kan filtrere samlinger med flere kriterier:

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

Her filtrerte vi og telle antall kunder hvis navn starter med "Charles" og som har mer enn 10 poeng.

Vi kan også trekke ut kriteriene i sin egen metode og bruke metodereferanse:

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

3. Konklusjon

I denne artikkelen så vi noen eksempler på hvordan du bruker telle() metode i kombinasjon med filter() metode for å behandle strømmer. For videre brukstilfeller av telle(), sjekk ut andre metoder som returnerer a Strøm, som de som er vist i veiledningen vår om sammenslåing av strømmer med concat ().

Som alltid er den komplette koden tilgjengelig på GitHub.


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