Filtr strumienia Java

Filtr strumienia Java
Przykładem strumienia jest: ołówek, atrament, zwyczajowy, ludzie, kot. Ciasto, leśnictwo

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śnictwo

Innym przykładem strumienia jest:

pies, nietoperz, null, pole, kraj, null, superpozycja

Jeśli ten strumień ma zostać filtrowany, aby wartości zerowe nie były obecne, wynik byłby:

pies, nietoperz, pola, kraj, superpozycja

Kolejny przykład strumienia to:

1, 2, 3, 4, 5, 6, 7, 8

Jeś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, 8

Strumień 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
  • Niektóre struktury produkujące strumienie
  • Metoda Filter ()
  • Wniosek

Orzec

Predykat jest funkcją, która powoduje prawdziwe lub fałsz. Dla strumienia,

ołówek, atrament, zwyczajowy, ludzie, kot, ciasto, leśnictwo

Predykat filtra ma tylko słowa, których długość jest większa niż 5, może być:

Słowo -> słowo.długość ()> 5

Sł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, superpozycja

Predykat filtra, aby mieć słowa nieerowe, może być:

Słowo -> słowo != NULL

To wyrażenie oznacza, że ​​adresowane słowo nie jest null.

Dla strumienia liczb całkowitych,

1, 2, 3, 4, 5, 6, 7, 8

Predykat filtra, aby nie mieć żadnej liczby, która jest mniejsza lub równa 5, to:

Numer -> Numer> = 6

gdzie 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 statyczne Lista Aslist (t… a)

Jest 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ń:

Lista LST = tablice.Aslist (1, 2, 3, 4, 5, 6, 7, 8);

Obiekt 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ń strumień()

Ta metoda zwraca obiekt strumienia. Poniższy segment kodu to ilustruje:

ArrayList al = nowy ArrayList();
glin.Dodaj („pies”); glin.Dodaj („nietoperz”); glin.Dodaj (null); glin.Dodaj pole");
glin.Dodaj („kraj”); glin.Dodaj (null); glin.Dodaj („Superpozycja”);
Strumień Stre = al.strumień();

Stre 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ń:

Wektor vtr = nowy wektor();
vtr.Dodaj („ołówek”); vtr.Dodaj („Ink”); vtr.Dodaj („zwyczajowy”); vtr.Dodaj ludzi");
vtr.Dodaj („cat”); vtr.Dodaj („ciasto”); vtr.Dodaj („leśnictwo”);
Lista lst = vtr.Sublist (0, VTR.rozmiar());
Strumień Stre = lst.strumień();

Obiekt 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.*;
Importuj Java.Util.strumień.*;

Filtrowanie sznurków większych niż długość

Poniższy kod pokazuje, jak to zrobić:

Wektor vtr = nowy wektor();
vtr.Dodaj („ołówek”); vtr.Dodaj („Ink”); vtr.Dodaj („zwyczajowy”); vtr.Dodaj ludzi");
vtr.Dodaj („cat”); vtr.Dodaj („ciasto”); vtr.Dodaj („leśnictwo”);
Lista lst = vtr.Sublist (0, VTR.rozmiar());
Strumień Stre = lst.strumień();
Strumień Strea = Stre.filtr (słowo -> słowo.długość ()> 5);
Strea.foreach (element -> system.na zewnątrz.print (element + ""));
System.na zewnątrz.println ();

Metoda foreach () przyjęła funkcję Lambda, której tym razem nie jest predykatem. Filtrowane wyjście to:

Ołówek zwyczajowych leśnictwa

Odfiltrowanie wartości zerowych

Poniższy kod pokazuje, jak można go zrobić:

ArrayList al = nowy ArrayList();
glin.Dodaj („pies”); glin.Dodaj („nietoperz”); glin.Dodaj (null); glin.Dodaj pole");
glin.Dodaj („kraj”); glin.Dodaj (null); glin.Dodaj („Superpozycja”);
Strumień Stre = al.strumień();
Strumień Strea = Stre.filtr (słowo -> słowo != null);
Strea.foreach (element -> system.na zewnątrz.print (element + ""));
System.na zewnątrz.println ();

Wyjście to:

Superpozycja krajowa psa nietoperza

Filtrowanie dla większych liczb całkowitych

Poniższy kod to ilustruje:

Lista LST = tablice.Aslist (1, 2, 3, 4, 5, 6, 7, 8);
Strumień Stre = lst.strumień();
Strumień Strea = Stre.filtr (liczba -> liczba> = 6);
Strea.foreach (element -> system.na zewnątrz.print (element + ""));
System.na zewnątrz.println ();

Wyjście to:

6 7 8

Wniosek

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ń.