Java -strömmar för nybörjare: En introduktion till användning av strömmar i Java

Java -strömmar för nybörjare: En introduktion till användning av strömmar i Java

Java 8 -strömmar tillåter utvecklare att extrahera exakta data från en stor samling, med hjälp av en uppsättning fördefinierade operationer.





Före utgivningen av Java 8 skulle användningen av termen 'ström' i Java automatiskt associeras med I/O. Java 8 introducerade emellertid en ström som kan kallas en uppsättning beräkningssteg som är sammanlänkade i det som vanligtvis kallas en 'strömpipeline'.





Denna artikel kommer att introducera dig till Java 8 -strömmar och visa hur de kan vara användbara i dina projekt.





Vad är en ström?

En ström är ett Java -gränssnitt som tar en källa, utför en uppsättning operationer för att extrahera specifika data och sedan tillhandahåller dessa data till applikationen för användning. I huvudsak kan du extrahera specialiserad data från en samling generaliserade data.

Hur strömmar fungerar

En strömledning börjar alltid med en källa. Källtypen beror på vilken typ av data du har att göra med, men två av de mer populära är matriser och samlingar.



För att omvandla samlingen till en första ström måste du lägga till ström() funktion till källan. Detta kommer att placera källan i strömledningen där flera olika mellanoperationer (t.ex. filtrera() och sortera() ) kan hantera det.

När alla nödvändiga mellanoperationer har utförts kan du införa en terminaloperation (t.ex. för varje() ), som kommer att producera tidigare extraherade data från källan.





Livet utan strömmar

Java 8 släpptes 2014, men innan dess behövde Java -utvecklare fortfarande extrahera specialiserad data från en samling allmänna data.

hur man spelar gamla datorspel på Windows 10

Låt oss säga att du har en lista över slumpmässiga tecken som kombineras med slumpmässiga nummer för att bilda unika strängvärden, men du vill bara ha de värden som börjar med tecknet C och du vill ordna resultatet i stigande ordning. Så här kan du extrahera data utan strömmar.





Relaterad: Vad du behöver veta om hur du använder strängar i Java

Filtrering och sortering av värden utan strömmar Exempel


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));
}
}

Du måste också deklarera och initiera matrislistan oavsett om du använder strömmar eller någon annan utvinningsmetod. Vad du inte skulle behöva göra om du använde strömmar är att deklarera en ny variabel för att hålla de nödvändiga värdena, och inte heller skapa de andra fem pluskoderna i exemplet ovan.

Relaterad: Hur man skapar och utför operationer på matriser i Java

Koden ovan ger följande utdata i konsolen:


C11
C12
C13
C14
C15
C16

Livet med strömmar

I programmering talar effektivitet om att producera samma resultat med betydligt mindre kod. Detta är exakt vad en strömpipeline gör för en programmerare. Så nästa gång någon frågar: varför är det viktigt att använda strömmar i ditt projekt? Enkelt uttryckt: strömmar stöder effektiv programmering.

Fortsätter med vårt exempel ovan, så här förändrar införandet av strömmar hela programmet.

Filtrering och sortering av värden med ett strömexempel


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);
}
}

Koden ovan visar hur kraftfullt strömgränssnittet är. Den tar en lista över slumpmässiga arrayvärden och omvandlar den till en ström med hjälp av ström() fungera. Strömmen reduceras sedan till en matrislista som innehåller de nödvändiga värdena (vilket är alla värden som börjar med C ), använda filtrera() fungera.

Som du kan se i exemplet ovan är C värden ordnas slumpmässigt i matrislistan. Om du skulle skriva ut strömmen vid denna tidpunkt i rörledningen, värdet C15 skulle skrivas ut först. Därför sortera() funktion introduceras till strömpipelinen för att ordna om den nya matrisen i stigande ordning.

Den slutliga funktionen i strömledningen är a för varje() fungera. Detta är en terminalfunktion som används för att stoppa strömpipelinen och ger följande resultat i konsolen:


C11
C12
C13
C14
C15
C16

Ström mellanliggande operationer

Det finns en omfattande lista över mellanliggande operationer som kan användas i en strömledning.

En strömledning börjar alltid med en enda källa och a ström() funktion, och slutar alltid med en enda terminaloperation (även om det finns flera olika att välja mellan.) Men mellan dessa två sektioner finns en lista med sex mellanoperationer som du kan använda.

I vårt exempel ovan används endast två av dessa mellanoperationer --- filtrera() och sortera() . Den mellanliggande operationen du väljer beror på de uppgifter du vill utföra.

Om något av de värden som börjar med C i vår matarlista ovan var med små bokstäver och vi utförde samma mellanoperationer på dem, skulle vi få följande resultat.

Utför filter- och sorteringsoperationer på exempel på små bokstäver


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);
}
}

Koden ovan ger följande värden i konsolen:


C11
C12
C14
C15

Det enda problemet med utdata ovan är att det inte exakt representerar alla C värden i vår matarlista. Ett bra sätt att åtgärda detta lilla fel är att introducera en annan mellanliggande operation till strömpipelinen; denna operation är känd som Karta() fungera.

Använda kartfunktionsexemplet


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 Karta() funktion omvandlar ett objekt från ett tillstånd till ett annat; i vårt exempel ovan omvandlar det alla små bokstäver i matarlistan till stora bokstäver.

Placera Karta() fungerar strax före filtrera() funktion hämtar alla värden som börjar med C från matrislistan.

Koden ovan ger följande resultat i konsolen, som framgångsrikt representerar alla C värden i matrislistan.


C11
C12
C13
C14
C15
C16

De andra tre mellanliggande operationerna som du kan använda i dina applikationer inkluderar:

  • titt()
  • begränsa()
  • hoppa()

Java 8 -strömmar underlättar skapandet av effektiv kod

Med Java 8 -strömmar kan du extrahera extra specifika, relevanta data från en stor källa med en kodrad. Så länge du tar med initialen ström() funktion och en terminaloperatör, kan du använda valfri kombination av mellanoperationer som ger passande utgångar för ditt mål.

hur ser du dina prenumeranter på youtube

Om du undrar om kodraden i vår filtrera() fungera; det är känt som ett 'lambda -uttryck'. Lambda -uttryck är en annan funktion som introduceras med Java 8, och den har många nuggets som du kan tycka är användbara.

Dela med sig Dela med sig Tweet E-post En snabb introduktion till Java 8 Lambdas

Om du är en Java -programmerare och du är intresserad av att lära dig mer om Java 8 lambdas, kommer vi i den här artikeln att titta närmare på lambdas syntax och användning.

Läs Nästa
Relaterade ämnen
  • Programmering
  • Java
  • Handledning för kodning
Om författaren Kadeisha Kean(21 artiklar publicerade)

Kadeisha Kean är en fullstack mjukvaruutvecklare och teknisk/teknikförfattare. Hon har den distinkta förmågan att förenkla några av de mest komplexa tekniska begreppen; producerar material som lätt kan förstås av någon nybörjare inom teknik. Hon brinner för att skriva, utveckla intressant programvara och resa runt i världen (genom dokumentärer).

Mer från Kadeisha Kean

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera