Strumienie Java 8 umożliwiają programistom wyodrębnianie precyzyjnych danych z dużej kolekcji przy użyciu zestawu predefiniowanych operacji.
Przed wydaniem oprogramowania Java 8 używanie terminu „strumień” w języku Java było automatycznie kojarzone z operacjami we / wy. Jednak Java 8 wprowadziła strumień, który można określić jako zestaw kroków obliczeniowych połączonych ze sobą w coś, co jest powszechnie określane jako „potok strumienia”.
Ten artykuł wprowadzi Cię w strumienie Java 8 i pokaże, jak mogą być przydatne w Twoich projektach.
Co to jest strumień?
Strumień to interfejs Java, który pobiera źródło, przeprowadza zestaw operacji w celu wyodrębnienia określonych danych, a następnie udostępnia te dane aplikacji w celu użycia. Zasadniczo umożliwia wyodrębnienie wyspecjalizowanych danych ze zbioru danych uogólnionych.
Jak działają strumienie
Potok strumienia zawsze zaczyna się od źródła. Rodzaj źródła zależy od rodzaju danych, z którymi masz do czynienia, ale dwa z bardziej popularnych to tablice i kolekcje.
Aby przekształcić kolekcję w początkowy strumień, musisz dodać strumień() funkcji do źródła. Spowoduje to umieszczenie źródła w potoku strumienia, w którym kilka różnych operacji pośrednich (takich jak filtr() i sortować()) może na nim operować.
Po wykonaniu wszystkich wymaganych operacji pośrednich można wprowadzić operację terminalową (np dla każdego()), co spowoduje wygenerowanie wcześniej wyodrębnionych danych ze źródła.
Życie bez strumieni
Java 8 została wydana w 2014 roku, ale wcześniej programiści Java nadal musieli wyodrębniać specjalistyczne dane ze zbioru danych ogólnych.
Załóżmy, że masz listę losowych znaków, które są łączone z losowymi liczbami w celu utworzenia unikalnych wartości ciągów, ale chcesz tylko wartości zaczynające się od znaku „C” i chcesz uporządkować wynik rosnąco zamówienie. W ten sposób można wyodrębnić te dane bez strumieni.
Związane z: Co musisz wiedzieć o używaniu ciągów znaków w Javie
Przykład filtrowania i sortowania wartości bez strumieni
import java.util. ArrayList;
import java.util. Tablice;
import java.util. Lista;
public class Main {
public static void main (String [] args) {
// zadeklaruj i zainicjalizuj listę tablic
Lista 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”
);
// zadeklaruj, że lista tablic będzie przechowywać potrzebne wartości
Lista requiredValues = new ArrayList <> ();
// wyodrębnienie wymaganych wartości i zapisanie ich w reqquiredValues
randomValues.forEach (wartość -> {
if (value.startsWith ("C")) {
requiredValues.add (wartość);
}
});
// sortuj wymagane wartości w porządku rosnącym
requiredValues.sort ((String wartość1, String wartość2) -> wartość1.compareTo (wartość2));
// wypisuje każdą wartość na konsoli
requiredValues.forEach ((wartość ciągu) -> System.out.println (wartość));
}
}
Będziesz także musiał zadeklarować i zainicjować listę tablic, niezależnie od tego, czy używasz strumieni, czy innej metody wyodrębniania. To, czego nie musiałbyś robić, gdybyś używał strumieni, to zadeklarowanie nowej zmiennej do przechowywania wymaganych wartości ani utworzenie pozostałych pięciu dodatkowych wierszy kodu w powyższym przykładzie.
Związane z: Jak tworzyć i wykonywać operacje na tablicach w Javie
Powyższy kod generuje następujące dane wyjściowe w konsoli:
C11
C12
C13
C14
C15
C16
Życie ze strumieniami
W programowaniu wydajność oznacza uzyskanie takiego samego wyniku przy znacznie mniejszej ilości kodu. To jest dokładnie to, co potok strumienia robi dla programisty. Więc następnym razem, gdy ktoś zapyta: „dlaczego ważne jest, aby używać strumieni w swoim projekcie?” Mówiąc najprościej: „strumienie wspierają wydajne programowanie”.
Kontynuując powyższy przykład, w ten sposób wprowadzenie strumieni przekształca cały program.
Filtrowanie i sortowanie wartości na przykładzie strumienia
import java.util. Tablice;
import java.util. Lista;
public class Main {
public static void main (String [] args) {
// zadeklaruj i zainicjalizuj listę tablic
Lista 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”
);
// pobiera tylko wartości zaczynające się od C, sortuje je i wyświetla na konsoli.
randomValues.stream (). filter (wartość-> wartość.startsWith ("C")). sortowane (). forEach (System.out:: println);
}
}
Powyższy kod pokazuje, jak potężny jest interfejs strumienia. Pobiera listę losowych wartości tablic i przekształca ją w strumień przy użyciu strumień() funkcjonować. Strumień jest następnie redukowany do listy tablic, która zawiera wymagane wartości (czyli wszystkie wartości zaczynające się od do), używając filtr() funkcjonować.
Jak widać w powyższym przykładzie, rozszerzenie do wartości są losowo rozmieszczane na liście tablic. Jeśli chcesz wydrukować strumień w tym punkcie potoku, wartość C15 zostanie wydrukowany jako pierwszy. Dlatego też sortować() funkcja jest wprowadzana do potoku strumienia, aby zmienić kolejność nowej tablicy w kolejności rosnącej.
Ostatnią funkcją w potoku strumienia jest plik dla każdego() funkcjonować. To jest funkcja terminala, która służy do zatrzymywania potoku strumienia i generuje w konsoli następujące wyniki:
C11
C12
C13
C14
C15
C16
Istnieje obszerna lista operacji pośrednich, których można użyć w potoku strumienia.
Potok strumienia zawsze zaczyna się od jednego źródła i pliku strumień() funkcji i zawsze kończy się pojedynczą operacją terminalową (chociaż jest kilka różnych do do wyboru.) Ale pomiędzy tymi dwoma sekcjami znajduje się lista sześciu operacji pośrednich, które możesz wykonać posługiwać się.
W powyższym przykładzie używane są tylko dwie z tych operacji pośrednichfiltr() i sortować(). Wybrana operacja pośrednia będzie zależeć od zadań, które chcesz wykonać.
Gdyby którakolwiek z wartości zaczynających się od „C” na naszej liście tablic powyżej była zapisana małymi literami i wykonaliśmy na nich te same operacje pośrednie, otrzymalibyśmy następujący wynik.
Wykonywanie operacji filtrowania i sortowania na małych literach Przykład
import java.util. Tablice;
import java.util. Lista;
public class Main {
public static void main (String [] args) {
// zadeklaruj i zainicjalizuj listę tablic
Lista 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”
);
// pobiera tylko wartości zaczynające się od C, sortuje je i wyświetla na konsoli.
randomValues.stream (). filter (wartość-> wartość.startsWith ("C")). sortowane (). forEach (System.out:: println);
}
}
Powyższy kod wygeneruje w konsoli następujące wartości:
C11
C12
C14
C15
Jedyny problem z powyższymi danymi wyjściowymi polega na tym, że nie reprezentują one dokładnie wszystkich do wartości na naszej liście tablic. Dobrym sposobem na naprawienie tego małego błędu jest wprowadzenie kolejnej operacji pośredniej do potoku strumienia; ta operacja jest znana jako mapa() funkcjonować.
Korzystanie z przykładu funkcji mapy
import java.util. Tablice;
import java.util. Lista;
public class Main {
public static void main (String [] args) {
// zadeklaruj i zainicjalizuj listę tablic
Lista 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”
);
// przekształca wszystkie małe litery na duże,
// pobiera tylko wartości zaczynające się od C, sortuje je i wyświetla na konsoli.
randomValues.stream (). map (String:: toUpperCase) .filter (wartość-> wartość.startsWith ("C")). sortowane (). forEach (System.out:: println);
}
}
Plik mapa() funkcja przekształca obiekt z jednego stanu w inny; w naszym przykładzie powyżej przekształca wszystkie małe litery w tablicy tablic na wielkie litery.
Umieszczanie mapa() funkcja tuż przed filtr() funkcja pobiera wszystkie wartości zaczynające się od do z listy tablic.
Powyższy kod generuje następujący wynik w konsoli, pomyślnie reprezentując wszystkie pliki do wartości na liście tablic.
C11
C12
C13
C14
C15
C16
Pozostałe trzy operacje pośrednie, których możesz użyć w swoich aplikacjach, obejmują:
- zerkać()
- limit()
- pominąć()
Strumienie Java 8 ułatwiają tworzenie wydajnego kodu
Dzięki strumieniom Java 8 możesz wyodrębnić dodatkowe szczegółowe, istotne dane z dużego źródła za pomocą jednej linii kodu. O ile uwzględnisz inicjał strumień() funkcji i operatora terminala, możesz użyć dowolnej kombinacji operacji pośrednich, które zapewniają dopasowanie wyników do Twojego celu.
Jeśli zastanawiasz się nad linią kodu zawartą w naszym filtr() funkcjonować; nazywane jest „wyrażeniem lambda”. Wyrażenia lambda to kolejna funkcja wprowadzona w Javie 8, która zawiera wiele użytecznych elementów.
Jeśli jesteś programistą języka Java i chcesz dowiedzieć się więcej o lambdach Java 8, w tym artykule przyjrzymy się bliżej składni i wykorzystaniu lambda.
Czytaj dalej
- Programowanie
- Jawa
- Samouczki kodowania
Kadeisha Kean jest pełnoprawnym programistą i pisarzem technicznym / technologicznym. Ma wyraźną umiejętność upraszczania niektórych najbardziej złożonych koncepcji technologicznych; wytwarzanie materiału zrozumiałego dla każdego nowicjusza w dziedzinie technologii. Pasjonuje się pisaniem, tworzeniem ciekawego oprogramowania i podróżowaniem po świecie (poprzez filmy dokumentalne).
Zapisz się do naszego newslettera
Dołącz do naszego biuletynu, aby otrzymywać wskazówki techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Jeszcze jeden krok…!
Potwierdź swój adres e-mail w wiadomości e-mail, którą właśnie wysłaliśmy.