Jeśli ten strumień ma zostać przefiltrowany, aby uzyskać tylko słowa, których długość jest więcej niż pięć znaków, wynik byłby:
ołówek, zwyczajowy, ludzie, leśnictwoInnym przykładem strumienia jest:
pies, nietoperz, null, pole, kraj, null, superpozycjaJeśli ten strumień ma zostać filtrowany, aby wartości zerowe nie były obecne, wynik byłby:
pies, nietoperz, pola, kraj, superpozycjaKolejny przykład strumienia to:
1, 2, 3, 4, 5, 6, 7, 8Jeśli ten strumień ma zostać filtrowany, aby wynik nie miał żadnej liczby, która jest mniejsza lub równa 5, wówczas wynik byłby:
6, 7, 8Strumień jest sekwencją elementów. Źródłem strumienia może być tablica, kolekcja lub dane wejściowe z dysku twardego lub sieci. Filtrowanie strumienia oznacza wyeliminowanie niektórych elementów na podstawie niektórych kryteriów. Takie kryteria, po zakodowaniu, są funkcją i nazywa się predykatem.
Treść artykułu
Orzec
Predykat jest funkcją, która powoduje prawdziwe lub fałsz. Dla strumienia,
ołówek, atrament, zwyczajowy, ludzie, kot, ciasto, leśnictwoPredykat filtra ma tylko słowa, których długość jest większa niż 5, może być:
Słowo -> słowo.długość ()> 5Słowo jest zmienną fikcyjną i reprezentuje każde słowo w strumieniu. Funkcja taka, z strzałką ->, nazywa się wyrażeniem lambda. Ta funkcja jest interpretowana jako słowa, których długości są większe niż 5. Metoda długości klasy ciągów zwraca długość ciągu.
Słowa są czytane jeden po drugim i dla każdego przypadku, jeśli długość słowa jest większa niż 5, całe to wyrażenie (od „słowa” do 5) spowodowałoby prawdziwe; W przeciwnym razie całe wyrażenie spowodowałoby fałszywe.
Dla strumienia,
pies, nietoperz, null, pole, kraj, null, superpozycjaPredykat filtra, aby mieć słowa nieerowe, może być:
Słowo -> słowo != NULLTo wyrażenie oznacza, że adresowane słowo nie jest null.
Dla strumienia liczb całkowitych,
1, 2, 3, 4, 5, 6, 7, 8Predykat filtra, aby nie mieć żadnej liczby, która jest mniejsza lub równa 5, to:
Numer -> Numer> = 6gdzie liczba odnosi się do każdej liczby (z kolei). Oznacza to, że dowolna liczba wybrana powinna być większa lub równa 6.
W filtrowaniu elementów strumienia nie tylko kodowanie predykatu, które programista musi wiedzieć. Programista musi również wiedzieć, jakie struktury wytwarzają strumień i jak wytwarzany jest strumień. Tablica lub kolekcja jest źródłem strumienia. Nie zapominaj, że operacje wejściowe/wyjściowe komputera mogą również wytworzyć strumień; Jednak ten artykuł nie dotyczy tego.
Niektóre struktury produkujące strumienie
Szyk
Tablice to klasa, która ma obsłużyć tablice. Metody tablic podejmują faktyczną tablicę jako jeden z jej argumentów. Tablice, jako klasa, ma następującą metodę:
publiczne statyczneJest to metoda statyczna, co oznacza, że obiekt tablic nie jest utworzony. Ta metoda zwraca listę. Listę można uznać za niefiltrowany lub filtowany strumień, ale nie jest to prawdziwy strumień. Na przykład w poniższym stwierdzeniu LST wyprodukowane z surowego źródła liczb całkowitych jest jak niefiltrowany strumień:
ListaObiekt listy ma metodę tworzenia niefiltrowanego strumienia z tymi samymi elementami listy, ale jako strumień - patrz poniżej.
Kolekcja
Przykładami kolekcji to tablica i wektor. Sama lista jest kolekcją ogólnego przeznaczenia.
ArrayList
ArrayList, jako klasa, ma następującą metodę:
Domyślny strumieńTa metoda zwraca obiekt strumienia. Poniższy segment kodu to ilustruje:
ArrayListStre to niefiltrowany strumień.
Lista
Lista jest w rzeczywistości interfejsem; To nie jest klasa. Jednak jego obiekt można zwrócić metodą tablic statycznych, aslist (), jak pokazano powyżej. Obiekt listy ma metodę Stream (), która jest taka jak obiekt ArrayList. Poniższy segment kodu pokazuje, w jaki sposób obiekt listy może zwrócić strumień:
WektorObiekt listy tutaj jest zwracany metodą wektora Sublist ().
Uwaga: klasa tablic, klasa ArrayList, klasa wektorowa i interfejs listy znajdują się w Javie.Util.* Pakiet, który należy zaimportować. Jednak interfejs strumienia znajduje się w Javie.Util.strumień.* Pakiet (małe litery), który powinien być również zaimportowany.
Metoda Filter ()
Tak więc arrayList lub obiekt listy może wytworzyć strumień za pomocą metod strumienia (). Co może wyprodukować obiekt listy? Klasa tablic i klasa wektorowa może wytworzyć obiekt listy. Klasa tablic używa swojej metody aslist (), a klasa wektorowa używa metody Sublist ().
Strumień jest interfejsem, a nie klasą. Obiekt strumienia jest zwracany metodą strumienia obiektu List lub obiektu ArrayList. Obiekt strumieniowy ma metodę filtrowania Filter (). Jego argumentem jest predykat. Nowy strumień zwrócony metodą filtra to filtrowany strumień.
Obiekt strumienia ma wiele metod. Dwa z nich to: Count () i Foreach (). Metoda Count () zwraca liczbę elementów w strumieniu, a metoda foreach () służy do skanowania elementów strumienia.
Program Java powinien zacząć od:
Importuj Java.Util.*;Filtrowanie sznurków większych niż długość
Poniższy kod pokazuje, jak to zrobić:
WektorMetoda foreach () przyjęła funkcję Lambda, której tym razem nie jest predykatem. Filtrowane wyjście to:
Ołówek zwyczajowych leśnictwaOdfiltrowanie wartości zerowych
Poniższy kod pokazuje, jak można go zrobić:
ArrayListWyjście to:
Superpozycja krajowa psa nietoperzaFiltrowanie dla większych liczb całkowitych
Poniższy kod to ilustruje:
ListaWyjście to:
6 7 8Wniosek
Klasa tablic może wytworzyć obiekt listy za pomocą metody aslist (). Klasa wektorowa może wytworzyć obiekt listy za pomocą metody Sublist (). Każda z listy i obiektów ArrayList ma metodę strumienia (). Metoda strumienia zwraca niefiltrowany strumień. Zwracany obiekt strumienia ma metodę filtr (), która przyjmuje predykat (kryteria filtrowania). Metoda filtra zwraca filtrowany strumień.