Java 8 Streams peek () API

1. Inleiding

De Java Stream API laat ons kennismaken met een krachtig alternatief voor het verwerken van gegevens.

In deze korte tutorial zullen we ons concentreren op kijkje(), een vaak verkeerd begrepen methode.

2. Snel voorbeeld

Laten we onze handen vuil maken en proberen te gebruiken kijkje(). We hebben een hele reeks namen en we willen ze naar de console afdrukken.

Sinds kijkje() verwacht een Klant als enige argument lijkt het een goede match, dus laten we het eens proberen:

Stream nameStream = Stream.of ("Alice", "Bob", "Chuck"); nameStream.peek (System.out :: println);

Het bovenstaande fragment levert echter geen uitvoer op. Laten we, om te begrijpen waarom, een korte opfriscursus geven van aspecten van de levenscyclus van streams.

3. Tussenliggende vs. terminaloperaties

Bedenk dat streams uit drie delen bestaan: een gegevensbron, nul of meer tussenbewerkingen en nul- of één terminalbewerking.

De bron levert de elementen aan de pijpleiding.

Tussenliggende bewerkingen halen elementen een voor een op en verwerken ze. Alle tussenliggende bewerkingen zijn lui, en als gevolg daarvan zullen geen bewerkingen enig effect hebben totdat de pijplijn begint te werken.

Terminaloperaties betekenen het einde van de levenscyclus van een stream. Het belangrijkste voor ons scenario zijn ze start het werk in de pijplijn.

4. kijkje() Gebruik

De reden kijkje() werkte niet in ons eerste voorbeeld is dat het is een tussenproduct operatie en we hebben geen terminal operatie naar de pijpleiding. Als alternatief hadden we kunnen gebruiken voor elke () met hetzelfde argument om het gewenste gedrag te krijgen:

Stream nameStream = Stream.of ("Alice", "Bob", "Chuck"); nameStream.forEach (System.out :: println);

kijkje()Op de Javadoc-pagina staat: "Deze methode bestaat voornamelijk om foutopsporing te ondersteunen, waarbij u de elementen wilt zien terwijl ze langs een bepaald punt in een pijplijn stromen“.

Laten we dit fragment van dezelfde Javadoc-pagina eens bekijken:

Stream.of ("one", "two", "three", "four") .filter (e -> e.length ()> 3) .peek (e -> System.out.println ("Gefilterde waarde: "+ e)) .map (String :: toUpperCase) .peek (e -> System.out.println (" Toegewezen waarde: "+ e)) .collect (Collectors.toList ());

Het laat zien hoe we de elementen observeren die door elke bewerking zijn gegaan.

Daarbovenop, kijkje() kan nuttig zijn in een ander scenario: wanneer we willen de innerlijke toestand van een element veranderen. Laten we bijvoorbeeld zeggen dat we alle gebruikersnaam naar kleine letters willen converteren voordat we ze afdrukken:

Stream userStream = Stream.of (nieuwe gebruiker ("Alice"), nieuwe gebruiker ("Bob"), nieuwe gebruiker ("Chuck")); userStream.peek (u -> u.setName (u.getName (). toLowerCase ())) .forEach (System.out :: println);

Als alternatief hadden we kunnen gebruiken kaart(), maar kijkje() is handiger omdat we het element niet willen vervangen.

5. Conclusie

In deze korte tutorial hebben we een samenvatting van de stream-levenscyclus gezien om te begrijpen hoe kijkje() werken. We zagen ook twee gevallen voor dagelijks gebruik tijdens het gebruik kijkje() is de meest eenvoudige optie.

En zoals gewoonlijk zijn de voorbeelden beschikbaar op GitHub.