Java Stream -filter

Java Stream -filter
Et eksempel på en strøm er: blyant, blekk, sedvaner, mennesker, katt. kake, skogbruk

Hvis denne strømmen skal filtreres, for å ha et resultat av bare ord hvis lengde er mer enn fem tegn, vil resultatet være:

blyant, vanlig, mennesker, skogbruk

Et annet eksempel på en strøm er:

Hund, flaggermus, null, felt, land, null, superposisjon

Hvis denne strømmen skal filtreres slik at nullverdier ikke er til stede, vil resultatet bli:

hund, flaggermus, felt, land, superposisjon

Nok et eksempel på en strøm er:

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

Hvis denne strømmen skal filtreres slik at resultatet ikke har noe tall som er mindre enn eller lik 5, vil resultatet bli:

6, 7, 8

En strøm er en sekvens av elementer. Kilden til strømmen kan være en matrise, en samling eller inngang fra harddisken eller nettverket. Filtrering av en strøm betyr å eliminere visse elementer basert på noen kriterier. Slike kriterier, når kodet, er en funksjon, og det kalles et predikat.

Artikkelinnhold

  • Predikat
  • Noen strømproduserende strukturer
  • Filter () -metoden
  • Konklusjon

Predikat

Et predikat er en funksjon som resulterer i ekte eller usant. For strømmen,

blyant, blekk, vanlig, mennesker, katt, kake, skogbruk

Filteret predikatet for å bare ha ord hvis lengde er større enn 5, kan være:

ord -> ord.lengde ()> 5

Ord er en dummy -variabel og representerer hvert ord i strømmen. En funksjon som denne, med pilen ->, kalles et lambda -uttrykk. Denne funksjonen tolkes som ord hvis lengder er hver større enn 5. Lengdemetoden til en strengklasse returnerer lengden på strengen.

Ordene leses en-for-en, og for hvert tilfelle, hvis ordets lengde er større enn 5, vil alt det uttrykket (fra "ord" til 5) resultere i sant; Ellers vil alt uttrykket resultere i usant.

For strømmen,

Hund, flaggermus, null, felt, land, null, superposisjon

Filteret predikatet for å ha ikke-nullord kan være:

ord -> ord != null

Dette uttrykket betyr at ordet som adresseres ikke er null.

For strømmen av heltall,

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

Filterpredikatet, for ikke å ha noe tall som er mindre enn eller lik 5, er:

nummer -> nummer> = 6

der nummeret refererer til hvert nummer (på sin side). Dette betyr at et hvilket som helst antall valgt skal være større enn eller lik 6.

I filtreringselementer i en strøm er det ikke bare predikatkodingen som programmereren må vite. Programmereren må også vite hvilke strukturer som produserer en strøm og hvordan en strøm produseres. Array eller Collection er en kilde til en strøm. Ikke glem at datamaskininngang/utgangsoperasjoner også kan produsere en strøm; Denne artikkelen tar imidlertid ikke opp dette.

Noen strømproduserende strukturer

Array

Arrays er en klasse ment å håndtere matriser. Metodene for matriser tar en faktisk matrise som et av argumentene. Arrays, som klasse, har følgende metode:

offentlig statisk Liste ASLIST (T… a)

Dette er en statisk metode, noe som betyr at Arrays -objektet ikke er instantiert. Denne metoden returnerer en liste. Listen kan betraktes som en ufiltrert eller en filtrert strøm, men den er ikke en ekte strøm. For eksempel, i følgende uttalelse, er LST produsert fra en rå kilde til heltall som en ufiltrert strøm:

Liste LST = matriser.ASList (1, 2, 3, 4, 5, 6, 7, 8);

Listeobjektet har en metode for å produsere en ufiltrert strøm med de samme listeelementene, men som en strøm - se nedenfor.

Samling

Eksempler på en samling er ArrayList og Vector. Listen i seg selv er en generell formålssamling.

ArrayList

ArrayList, som klasse, har følgende metode:

Standardstrøm strøm()

Denne metoden returnerer et strømobjekt. Følgende kodesegment illustrerer dette:

ArrayList Al = ny ArrayList();
al.legg til ("hund"); al.Legg til ("flaggermus"); al.Legg til (null); al.legg til ("felt");
al.Legg til ("land"); al.Legg til (null); al.legg til ("superposisjon");
Strøm Stre = al.strøm();

Stre er en ufiltrert strøm.

Liste

Listen er faktisk et grensesnitt; Det er ikke en klasse. Imidlertid kan objektet returneres etter den statiske matriser -metoden, ASList (), som vist ovenfor. Listeobjektet har Stream () -metoden, som er akkurat som for ArrayList -objektet. Følgende kodesegment viser hvordan listeobjektet kan returnere en strøm:

Vektor VTR = ny vektor();
VTR.legg til ("blyant"); VTR.legg til ("blekk"); VTR.Legg til ("vanlig"); VTR.Legg til personer");
VTR.legg til ("katt"); VTR.tilsett ("kake"); VTR.Legg til ("skogbruk");
Liste LST = VTR.Sublist (0, VTR.størrelse());
Strøm Stre = lst.strøm();

Listeobjektet her blir returnert av sublist () -metoden til vektoren.

Merk: Arrays -klassen, ArrayList -klassen, vektorklassen og listegrensesnittet er i Java.util.* pakke, som skal importeres. Imidlertid er strømgrensesnittet i Java.util.strøm.* Pakke (små bokstaver), som også bør importeres.

Filter () -metoden

Så en arraylist eller et listeobjekt kan produsere en strøm ved hjelp av strømmets metoder (). Hva kan produsere et listeobjekt? Arrays -klassen og vektorklassen kan hver produsere et listeobjekt. Arrays -klassen bruker sin ASList () -metode, og vektorklassen bruker sin sublist () -metode.

Strømmen er et grensesnitt og ikke en klasse. Streamobjektet returneres ved strømmetoden til listeobjektet eller ArrayList -objektet. Streamobjektet har filter () -metoden for filtrering. Argumentet er predikatet. Den nye strømmen som er returnert av filtermetoden er den filtrerte strømmen.

Streamobjektet har mange metoder. To av dem er: Count () og foreach (). Count () -metoden returnerer antall elementer i strømmen, og foreach () -metoden brukes til å skanne strømelementene.

Java -programmet skal begynne med:

Importer Java.util.*;
Importer Java.util.strøm.*;

Filtrering for strenger større enn en lengde

Følgende kode viser hvordan du gjør dette:

Vektor VTR = ny vektor();
VTR.legg til ("blyant"); VTR.legg til ("blekk"); VTR.Legg til ("vanlig"); VTR.Legg til personer");
VTR.legg til ("katt"); VTR.tilsett ("kake"); VTR.Legg til ("skogbruk");
Liste LST = VTR.Sublist (0, VTR.størrelse());
Strøm Stre = lst.strøm();
Strøm Strea = Stre.filter (ord -> ord.lengde ()> 5);
Strea.foreach (element -> system.ute.print (element + ""));
System.ute.println ();

Foreach () -metoden tok en lambda -funksjon, hvorav denne gangen ikke er et predikat. Den filtrerte utgangen er:

blyant sedvanlige mennesker skogbruk

Filtrere av nullverdier

Følgende kode viser hvordan den kan gjøres:

ArrayList Al = ny ArrayList();
al.legg til ("hund"); al.Legg til ("flaggermus"); al.Legg til (null); al.legg til ("felt");
al.Legg til ("land"); al.Legg til (null); al.legg til ("superposisjon");
Strøm Stre = al.strøm();
Strøm Strea = Stre.filter (ord -> ord != null);
Strea.foreach (element -> system.ute.print (element + ""));
System.ute.println ();

Utgangen er:

Dog Bat Field Country Superposition

Filtrering for større heltall

Følgende kode illustrerer dette:

Liste LST = matriser.ASList (1, 2, 3, 4, 5, 6, 7, 8);
Strøm Stre = lst.strøm();
Strøm Strea = Stre.filter (nummer -> nummer> = 6);
Strea.foreach (element -> system.ute.print (element + ""));
System.ute.println ();

Utgangen er:

6 7 8

Konklusjon

Arrays -klassen kan produsere et listeobjekt med sin ASList () -metode. Vektorklassen kan produsere et listeobjekt med sin sublist () -metode. Listen og arrayList -objekter har hver strømmetode (). Strømmetoden returnerer den ufiltrerte strømmen. Streamobjektet som returneres har filteret () -metoden som tar et predikat (kriterier for filtrering). Filtermetoden returnerer den filtrerte strømmen.