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, skogbrukEt annet eksempel på en strøm er:
Hund, flaggermus, null, felt, land, null, superposisjonHvis denne strømmen skal filtreres slik at nullverdier ikke er til stede, vil resultatet bli:
hund, flaggermus, felt, land, superposisjonNok et eksempel på en strøm er:
1, 2, 3, 4, 5, 6, 7, 8Hvis denne strømmen skal filtreres slik at resultatet ikke har noe tall som er mindre enn eller lik 5, vil resultatet bli:
6, 7, 8En 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
Et predikat er en funksjon som resulterer i ekte eller usant. For strømmen,
blyant, blekk, vanlig, mennesker, katt, kake, skogbrukFilteret predikatet for å bare ha ord hvis lengde er større enn 5, kan være:
ord -> ord.lengde ()> 5Ord 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, superposisjonFilteret predikatet for å ha ikke-nullord kan være:
ord -> ord != nullDette uttrykket betyr at ordet som adresseres ikke er null.
For strømmen av heltall,
1, 2, 3, 4, 5, 6, 7, 8Filterpredikatet, for ikke å ha noe tall som er mindre enn eller lik 5, er:
nummer -> nummer> = 6der 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 statiskDette 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:
ListeListeobjektet 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ømDenne metoden returnerer et strømobjekt. Følgende kodesegment illustrerer dette:
ArrayListStre 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:
VektorListeobjektet 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.*;Filtrering for strenger større enn en lengde
Følgende kode viser hvordan du gjør dette:
VektorForeach () -metoden tok en lambda -funksjon, hvorav denne gangen ikke er et predikat. Den filtrerte utgangen er:
blyant sedvanlige mennesker skogbrukFiltrere av nullverdier
Følgende kode viser hvordan den kan gjøres:
ArrayListUtgangen er:
Dog Bat Field Country SuperpositionFiltrering for større heltall
Følgende kode illustrerer dette:
ListeUtgangen er:
6 7 8Konklusjon
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.