Matches tellen op een streamfilter

1. Overzicht

In deze tutorial onderzoeken we het gebruik van de Stream.count () methode. Specifiek, we zullen zien hoe we de tellen () methode met de filter() methode om de overeenkomsten van een Predikaatwe hebben toegepast.

2. Met behulp van Stream.count ()

De tellen () methode zelf biedt een kleine maar zeer nuttige functionaliteit. We kunnen het ook uitstekend combineren met andere tools, bijvoorbeeld met Stream.filter ().

Laten we hetzelfde gebruiken Klant klasse die we hebben gedefinieerd in onze tutorial voor Stream.filter ():

openbare klasse Klant {privé Stringnaam; privé int punten; // Constructor en standaard getters}

Daarnaast creëren we ook dezelfde verzameling klanten:

Klant john = nieuwe klant ("Jan P.", 15); Klant sarah = nieuwe klant ("Sarah M.", 200); Klant charles = nieuwe klant ("Charles B.", 150); Customer mary = nieuwe klant ("Mary T.", 1); Lijst met klanten = Arrays.asList (john, sarah, charles, mary);

Vervolgens passen we toe Stroom methoden op de lijst om het te filteren en te bepalen hoeveel overeenkomsten onze filters krijgen.

2.1. Elementen tellen

Laten we eens kijken naar het basisgebruik van tellen ():

lange telling = klanten.stream (). count (); assertThat (count) .isEqualTo (4L);

Let daar op tellen () geeft een terug lang waarde.

2.2. Gebruik makend van tellen () Met filter()

Het voorbeeld in de vorige paragraaf was niet echt indrukwekkend. We hadden tot hetzelfde resultaat kunnen komen met de List.size () methode.

Stream.count () schittert echt als we het combineren met andere Stroom methoden - meestal met filter():

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

In dit voorbeeld hebben we een filter toegepast op de lijst met klanten, en we hebben ook het aantal klanten verkregen dat aan de voorwaarde voldoet. In dit geval hebben we twee klanten met meer dan 100 punten.

Het kan natuurlijk ook gebeuren dat geen enkel element overeenkomt met ons filter:

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

2.3. Gebruik makend van tellen () Met geavanceerde filters

In onze tutorial over filter(), we zagen enkele meer geavanceerde gebruiksscenario's van de methode. Het resultaat hiervan kunnen we natuurlijk nog steeds tellen filter() operaties.

We kunnen collecties filteren met meerdere criteria:

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

Hier hebben we het aantal klanten gefilterd en geteld waarvan de naam begint met "Charles" en die meer dan 10 punten hebben.

We kunnen de criteria ook extraheren in zijn eigen methode en referentiemethode gebruiken:

lange telling = klanten .stream () .filter (Klant :: hasOverHundredPoints) .count (); assertThat (count) .isEqualTo (2L);

3. Conclusie

In dit artikel hebben we enkele voorbeelden gezien van het gebruik van de tellen () methode in combinatie met de filter() methode om streams te verwerken. Voor verder gebruik van tellen (), bekijk dan andere methoden die een Stroom, zoals getoond in onze tutorial over het samenvoegen van streams met concat ().

Zoals altijd is de volledige code beschikbaar op GitHub.


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