Filtro del flusso Java

Filtro del flusso Java
Un esempio di flusso è: matita, inchiostro, consuetudine, persone, gatto. Torta, silvicoltura

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, silvicoltura

Un altro esempio di un flusso è:

cane, pipistrello, null, campo, paese, null, sovrapposizione

Se questo flusso deve essere filtrato in modo che i valori nulli non siano presenti, il risultato sarebbe:

cane, pipistrello, campo, paese, sovrapposizione

Ancora un altro esempio di flusso è:

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

Se questo flusso deve essere filtrato in modo che il risultato non abbia alcun numero inferiore o uguale a 5, il risultato sarebbe:

6, 7, 8

Un 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
  • Alcuni flussi che producono strutture
  • Il metodo Filter ()
  • Conclusione

Predicato

Un predicato è una funzione che si traduce in vero o falso. Per il flusso,

matita, inchiostro, consuetudine, persone, gatto, torta, silvicoltura

Il predicato del filtro per avere solo parole la cui lunghezza è maggiore di 5, può essere:

parola -> parola.lunghezza ()> 5

la 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, sovrapposizione

Il predicato del filtro per avere parole non null può essere:

parola -> parola != NULL

Questa espressione significa che la parola indirizzata non è nulla.

Per il flusso di numeri interi,

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

Il predicato del filtro, di non avere alcun numero inferiore o uguale a 5, è:

Numero -> Numero> = 6

dove 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 pubblico Elenco aslist (t ... a)

Questo è 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:

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

L'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 predefinito flusso()

Questo metodo restituisce un oggetto Stream. Il seguente segmento di codice illustra questo:

Lista di array al = nuovo arraylist();
al.Aggiungi ("cane"); al.Aggiungi ("BAT"); al.Aggiungi (null); al.Aggiungi ("campo");
al.Aggiungi ("paese"); al.Aggiungi (null); al.aggiungere ("sovrapposizione");
Flusso stre = al.flusso();

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

Vettore vtr = nuovo vettore();
VTR.Aggiungi ("matita"); VTR.aggiungere ("inchiostro"); VTR.Aggiungi ("consuetudario"); VTR.Aggiungi persone");
VTR.Aggiungi ("gatto"); VTR.Aggiungi ("torta"); VTR.Aggiungi ("silvicoltura");
Elenco lst = vtr.sublist (0, vtr.misurare());
Flusso stre = lst.flusso();

L'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.*;
Importa Java.util.flusso.*;

Filtraggio per stringhe maggiori di una lunghezza

Il seguente codice mostra come farlo:

Vettore vtr = nuovo vettore();
VTR.Aggiungi ("matita"); VTR.aggiungere ("inchiostro"); VTR.Aggiungi ("consuetudario"); VTR.Aggiungi persone");
VTR.Aggiungi ("gatto"); VTR.Aggiungi ("torta"); VTR.Aggiungi ("silvicoltura");
Elenco lst = vtr.sublist (0, vtr.misurare());
Flusso stre = lst.flusso();
Flusso strea = stre.filtro (parola -> parola.lunghezza ()> 5);
strea.foreach (elemento -> sistema.fuori.print (elemento + ""));
Sistema.fuori.println ();

Il metodo Foreach () ha preso una funzione Lambda, di cui questa volta non è un predicato. L'output filtrato è:

Pencil People consuete forestale

Filtrando i valori null

Il seguente codice mostra come può essere fatto:

Lista di array al = nuovo arraylist();
al.Aggiungi ("cane"); al.Aggiungi ("BAT"); al.Aggiungi (null); al.Aggiungi ("campo");
al.Aggiungi ("paese"); al.Aggiungi (null); al.aggiungere ("sovrapposizione");
Flusso stre = al.flusso();
Flusso strea = stre.filtro (parola -> parola != null);
strea.foreach (elemento -> sistema.fuori.print (elemento + ""));
Sistema.fuori.println ();

L'output è:

Sovrapposizione del campo di campo di pipistrello per cani

Filtraggio per numeri interi più grandi

Il seguente codice illustra questo:

Elenco LST = array.Aslist (1, 2, 3, 4, 5, 6, 7, 8);
Flusso stre = lst.flusso();
Flusso strea = stre.filtro (numero -> numero> = 6);
strea.foreach (elemento -> sistema.fuori.print (elemento + ""));
Sistema.fuori.println ();

L'output è:

6 7 8

Conclusione

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.