Se questo flusso deve essere filtrato, per avere un risultato di sole parole la cui lunghezza è più di cinque caratteri, allora il risultato sarebbe:
matita, consuetudine, persone, silvicolturaUn altro esempio di un flusso è:
cane, pipistrello, null, campo, paese, null, sovrapposizioneSe questo flusso deve essere filtrato in modo che i valori nulli non siano presenti, il risultato sarebbe:
cane, pipistrello, campo, paese, sovrapposizioneAncora un altro esempio di flusso è:
1, 2, 3, 4, 5, 6, 7, 8Se questo flusso deve essere filtrato in modo che il risultato non abbia alcun numero inferiore o uguale a 5, il risultato sarebbe:
6, 7, 8Un flusso è una sequenza di elementi. La fonte del flusso può essere un array, una raccolta o un input dal disco rigido o dalla rete. Filtro un flusso significa eliminare alcuni elementi in base ad alcuni criteri. Tali criteri, quando codificati, sono una funzione ed è chiamato predicato.
Contenuto dell'articolo
Predicato
Un predicato è una funzione che si traduce in vero o falso. Per il flusso,
matita, inchiostro, consuetudine, persone, gatto, torta, silvicolturaIl predicato del filtro per avere solo parole la cui lunghezza è maggiore di 5, può essere:
parola -> parola.lunghezza ()> 5la parola è una variabile fittizia e rappresenta ogni parola nel flusso. Una funzione come questa, con la freccia ->, è chiamata espressione di lambda. Questa funzione è interpretata come parole le cui lunghezze sono ciascuna maggiore di 5. Il metodo di lunghezza di una classe di stringa restituisce la lunghezza della stringa.
Le parole vengono lette uno per uno e per ogni caso, se la lunghezza della parola è maggiore di 5, tutta quella espressione (da "parola" a 5) si tradurrebbe in vera; Altrimenti, tutta l'espressione si tradurrebbe in falso.
Per il flusso,
cane, pipistrello, null, campo, paese, null, sovrapposizioneIl predicato del filtro per avere parole non null può essere:
parola -> parola != NULLQuesta espressione significa che la parola indirizzata non è nulla.
Per il flusso di numeri interi,
1, 2, 3, 4, 5, 6, 7, 8Il predicato del filtro, di non avere alcun numero inferiore o uguale a 5, è:
Numero -> Numero> = 6dove il numero si riferisce a ciascun numero (a sua volta). Ciò significa che qualsiasi numero scelto dovrebbe essere maggiore o uguale a 6.
Nelle elementi filtranti di un flusso, non è solo la codifica predicata che il programmatore deve sapere. Il programmatore deve anche sapere quali strutture producono un flusso e come viene prodotto un flusso. L'array o la raccolta è una fonte di un flusso. Non dimenticare che le operazioni di input/output del computer possono anche produrre un flusso; Tuttavia, questo articolo non affronta questo.
Alcuni flussi che producono strutture
Vettore
Gli array sono una classe pensata per gestire gli array. I metodi di array prendono un array reale come uno dei suoi argomenti. Gli array, come classe, hanno il seguente metodo:
statico pubblicoQuesto è un metodo statico, il che significa che l'oggetto array non è istanziato. Questo metodo restituisce un elenco. L'elenco può essere considerato come un flusso non filtrato o filtrato, ma non è un vero flusso. Ad esempio, nella seguente affermazione, LST prodotto da una fonte grezza di numeri interi è come un flusso non filtrato:
ElencoL'oggetto elenco ha un metodo per produrre un flusso non filtrato con lo stesso elenco elementi, ma come flusso - vedi sotto.
Collezione
Esempi di collezioni sono ArrayList e Vector. L'elenco in sé è una raccolta di uso generale.
Lista di array
ArrayList, come classe, ha il seguente metodo:
flusso predefinitoQuesto metodo restituisce un oggetto Stream. Il seguente segmento di codice illustra questo:
Lista di arrayStre è un flusso non filtrato.
Elenco
L'elenco è in realtà un'interfaccia; Non è una classe. Tuttavia, il suo oggetto può essere restituito con il metodo degli array statici, Aslist (), come mostrato sopra. L'oggetto elenco ha il metodo Stream (), che è proprio come quello dell'oggetto ArrayList. Il seguente segmento di codice mostra come l'oggetto elenco può restituire un flusso:
VettoreL'oggetto elenco qui viene restituito dal metodo sublist () del vettore.
Nota: la classe Arrays, la classe ArrayList, la classe Vector e l'interfaccia dell'elenco sono nel Java.util.* pacchetto, che dovrebbe essere importato. Tuttavia, l'interfaccia del flusso è nel Java.util.flusso.* pacchetto (minuscolo 's'), che dovrebbe essere anche importato.
Il metodo Filter ()
Quindi, un ArrayList o un oggetto Elenco possono produrre un flusso usando i loro metodi Stream (). Cosa può produrre un oggetto elenco? La classe di array e la classe vettoriale possono produrre ciascuno un oggetto elenco. La classe Arrays utilizza il suo metodo Aslist () e la classe vettoriale utilizza il suo metodo sublist ().
Il flusso è un'interfaccia e non una classe. L'oggetto Stream viene restituito dal metodo di flusso dell'oggetto elenco o dell'oggetto ArrayList. L'oggetto Stream ha il metodo Filter () per il filtro. Il suo argomento è il predicato. Il nuovo flusso restituito con il metodo Filter è il flusso filtrato.
L'oggetto flusso ha molti metodi. Due di loro sono: count () e foreach (). Il metodo Count () restituisce il numero di elementi nel flusso e il metodo foreach () viene utilizzato per scansionare gli elementi del flusso.
Il programma Java dovrebbe iniziare con:
Importa Java.util.*;Filtraggio per stringhe maggiori di una lunghezza
Il seguente codice mostra come farlo:
VettoreIl metodo Foreach () ha preso una funzione Lambda, di cui questa volta non è un predicato. L'output filtrato è:
Pencil People consuete forestaleFiltrando i valori null
Il seguente codice mostra come può essere fatto:
Lista di arrayL'output è:
Sovrapposizione del campo di campo di pipistrello per caniFiltraggio per numeri interi più grandi
Il seguente codice illustra questo:
ElencoL'output è:
6 7 8Conclusione
La classe Arrays può produrre un oggetto Elenco con il suo metodo Aslist (). La classe Vector può produrre un oggetto elenco con il suo metodo sublist (). L'elenco e gli oggetti ArrayList hanno ciascuno il metodo Stream (). Il metodo del flusso restituisce il flusso non filtrato. L'oggetto Stream restituito ha il metodo Filter () che assume un predicato (criteri per il filtro). Il metodo del filtro restituisce il flusso filtrato.