Java-streams voor beginners: een inleiding tot het gebruik van streams in Java

Java-streams voor beginners: een inleiding tot het gebruik van streams in Java

Met Java 8-streams kunnen ontwikkelaars nauwkeurige gegevens uit een grote verzameling extraheren met behulp van een reeks vooraf gedefinieerde bewerkingen.





Vóór de release van Java 8 zou het gebruik van de term 'stream' in Java automatisch worden geassocieerd met I/O. Java 8 introduceerde echter een stroom die kan worden aangeduid als een reeks rekenstappen die aan elkaar zijn geketend in wat gewoonlijk een 'stroompijplijn' wordt genoemd.





Dit artikel laat je kennismaken met Java 8-streams en laat zien hoe ze nuttig kunnen zijn in je projecten.





Wat is een stroom?

Een stream is een Java-interface die een bron neemt, een reeks bewerkingen uitvoert om specifieke gegevens te extraheren en die gegevens vervolgens aan de toepassing levert voor gebruik. In wezen stelt het u in staat om gespecialiseerde gegevens te extraheren uit een verzameling gegeneraliseerde gegevens.

Hoe streams werken

Een stroompijplijn begint altijd met een bron. Het type bron is afhankelijk van het type gegevens waarmee u te maken hebt, maar twee van de meest populaire zijn arrays en verzamelingen.



Om de collectie om te zetten in een eerste stream, moet je de . toevoegen stroom() functie naar de bron. Hierdoor wordt de bron in de stroompijplijn geplaatst waar verschillende tussenliggende bewerkingen (zoals: filter() en soort() ) kan ermee werken.

Nadat alle vereiste tussenbewerkingen zijn uitgevoerd, kunt u een terminalbewerking invoeren (zoals: voor elk() ), die de eerder geëxtraheerde gegevens uit de bron zal produceren.





Leven zonder stromen

Java 8 werd uitgebracht in 2014, maar daarvoor moesten Java-ontwikkelaars nog gespecialiseerde gegevens extraheren uit een verzameling algemene gegevens.

beste manier om veel foto's te scannen

Stel dat u een lijst met willekeurige tekens hebt die worden gecombineerd met willekeurige getallen om unieke tekenreekswaarden te vormen, maar u wilt alleen de waarden die beginnen met het teken C en u wilt het resultaat in oplopende volgorde rangschikken. Dit is hoe je die gegevens zou extraheren zonder streams.





Verwant: Wat u moet weten over het gebruik van strings in Java

Waarden filteren en sorteren zonder streams Voorbeeld


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

U moet ook de arraylijst declareren en initialiseren, of u nu streams of een andere extractiemethode gebruikt. Wat u niet zou hoeven te doen als u streams zou gebruiken, is een nieuwe variabele declareren die de vereiste waarden bevat, noch de andere vijf plus regels code in het bovenstaande voorbeeld maken.

Verwant: Bewerkingen maken en uitvoeren op arrays in Java

De bovenstaande code produceert de volgende uitvoer in de console:


C11
C12
C13
C14
C15
C16

Leven met stromen

Bij het programmeren spreekt efficiëntie tot het produceren van hetzelfde resultaat met aanzienlijk minder code. Dit is precies wat een streampipeline doet voor een programmeur. Dus de volgende keer dat iemand vraagt: waarom is het belangrijk om streams in je project te gebruiken? Simpel gezegd: streams ondersteunen efficiënt programmeren.

Doorgaan met ons voorbeeld hierboven, dit is hoe het introduceren van streams het hele programma transformeert.

Waarden filteren en sorteren met een streamvoorbeeld


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

De bovenstaande code laat zien hoe krachtig de stream-interface is. Het neemt een lijst met willekeurige matrixwaarden en transformeert het in een stream met behulp van de stroom() functie. De stream wordt vervolgens gereduceerd tot een arraylijst die de vereiste waarden bevat (dit zijn alle waarden die beginnen met C ), de ... gebruiken filter() functie.

Zoals u in het bovenstaande voorbeeld kunt zien, is de C waarden zijn willekeurig gerangschikt in de arraylijst. Als u de stream op dit punt in de pijplijn zou afdrukken, wordt de waarde C15 eerst zou worden afgedrukt. Daarom, de soort() functie wordt geïntroduceerd in de stroompijplijn om de nieuwe array in oplopende volgorde te herschikken.

De laatste functie in de stroompijplijn is a voor elk() functie. Dit is een terminalfunctie die wordt gebruikt om de stroompijplijn te stoppen en de volgende resultaten oplevert in de console:


C11
C12
C13
C14
C15
C16

Intermediaire bewerkingen streamen

Er is een uitgebreide lijst met tussenliggende bewerkingen die in een stroompijplijn kunnen worden gebruikt.

Een stroompijplijn begint altijd met een enkele bron en a stroom() functie, en eindigt altijd met een enkele terminalbewerking (hoewel er verschillende zijn om uit te kiezen.) Maar tussen deze twee secties is een lijst van zes tussenbewerkingen die u kunt gebruiken.

In ons voorbeeld hierboven worden slechts twee van deze tussenbewerkingen gebruikt --- filter() en soort() . De tussenbewerking die u kiest, hangt af van de taken die u wilt uitvoeren.

Als een van de waarden die beginnen met C in onze arraylijst hierboven in kleine letters zou zijn en we dezelfde tussenbewerkingen daarop zouden uitvoeren, zouden we het volgende resultaat krijgen.

Filter- en sorteerbewerkingen uitvoeren op kleine letters Voorbeeld


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

De bovenstaande code produceert de volgende waarden in de console:


C11
C12
C14
C15

Het enige probleem met de bovenstaande uitvoer is dat deze niet alle C waarden in onze arraylijst. Een goede manier om deze kleine fout op te lossen, is door een andere tussenbewerking in de stroompijplijn te introduceren; deze operatie staat bekend als de kaart() functie.

Voorbeeld van de kaartfunctie gebruiken


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

De kaart() functie transformeert een object van de ene toestand naar de andere; in ons voorbeeld hierboven transformeert het alle kleine letters in de arraylijst naar hoofdletters.

Het plaatsen van de kaart() functie net voor de filter() functie haalt alle waarden op die beginnen met C uit de arraylijst.

De bovenstaande code produceert het volgende resultaat in de console, die met succes alle vertegenwoordigt C waarden in de arraylijst.


C11
C12
C13
C14
C15
C16

De andere drie tussenbewerkingen die u in uw toepassingen kunt gebruiken, zijn:

  • kijkje()
  • begrenzing()
  • overslaan()

Java 8-streams vergemakkelijken het maken van efficiënte code

Met Java 8-streams kun je met één regel code extra specifieke, relevante data uit een grote bron halen. Zolang u de initiaal opneemt stroom() functie en een terminaloperator, kunt u elke combinatie van tussentijdse bewerkingen gebruiken die passende resultaten bieden voor uw doel.

kun je de zaklamp aandoen?

Als je je afvraagt ​​​​over de coderegel die is ingesloten in onze filter() functie; het staat bekend als een 'lambda-uitdrukking'. Lambda-expressies zijn een andere functie die is geïntroduceerd met Java 8, en het heeft veel goudklompjes die je misschien handig vindt.

Deel Deel Tweeten E-mail Een korte introductie tot Java 8 Lambdas

Als je een Java-programmeur bent en meer wilt weten over Java 8 lambdas, gaan we in dit artikel dieper in op de syntaxis en het gebruik van lambda.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Java
  • Codeerhandleidingen
Over de auteur Kadeisha Kean(21 artikelen gepubliceerd)

Kadeisha Kean is een full-stack softwareontwikkelaar en technisch/technologisch schrijver. Ze heeft het onmiskenbare vermogen om enkele van de meest complexe technologische concepten te vereenvoudigen; materiaal produceren dat gemakkelijk kan worden begrepen door elke nieuwe technologie-beginner. Ze is gepassioneerd door schrijven, interessante software ontwikkelen en de wereld rondreizen (via documentaires).

Meer van Kadeisha Kean

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren