Video: Le lambda expression in Java - tutorial italiano 2025
Java ha dei metodi fantasiosi che fanno un uso ottimale degli stream e delle espressioni lambda. Con gli stream e le espressioni lambda, puoi creare una catena di montaggio. La soluzione della linea di assemblaggio utilizza i concetti della programmazione funzionale.
La catena di montaggio comprende diversi metodi. Ogni metodo prende i dati, trasforma i dati in un modo o nell'altro e passa i risultati al successivo metodo in linea. Ecco una catena di montaggio.
Ogni scatola rappresenta un mucchio di materie prime mentre vengono trasformate lungo una catena di montaggio. Ogni freccia rappresenta un metodo (o, metaforicamente, un lavoratore sulla catena di montaggio).
Ad esempio, nella transizione dalla seconda casella alla terza casella, un metodo di lavoro (il metodo
filtro
) elimina le vendite di articoli che non sono DVD. Immagina Lucy Ricardo in piedi tra la seconda e la terza scatola, rimuovendo ogni libro o CD dalla catena di montaggio e gettandolo con noncuranza sul pavimento.
Il parametro del metodo
del filtro
di Java è un
Predicato
- un'espressione lambda il cui risultato è
booleano
. Il metodo
filtro
elimina gli elementi che non superano il test
vero / falso
dell'espressione lambda.
Metodo Nome | Membro di | Parametri | Tipo di risultato | Valore risultato |
flusso
|
Raccolta
(ad esempio, un
ArrayList
, oggetto) |
(nessuno) |
Stream
|
Un flusso che sputa elementi della collezione |
filtro
|
Stream
|
Predicato
|
Stream > Un nuovo flusso contenente valori per i quali l'espressione lambda restituisce
|
true
mappa
|
Stream
|
Funzione
|
Stream
|
Un nuovo stream che contiene i risultati dell'applicazione dell'applicazione lambda al flusso in entrata
|
ridurre |
Stream
|
BinaryOperator
|
Il tipo utilizzato da
|
BinaryOperator
Il risultato della combinazione di tutti i valori nel flusso in entrata
|
|
mappa
) estrae il
prezzo
da ogni
vendita
. Da quel posto di lavoro in poi, la catena di montaggio contiene solo
prezzo
valori.
Per essere più precisi, il metodo
di Java
di Java utilizza una funzione
come
(vendita) -> vendita. getPrice ()
e applica la funzione
a ciascun valore in un flusso. Quindi il metodo
mappa
accetta uno stream in entrata di
vendita
oggetti e crea un flusso in uscita di valori
prezzo
.
Nella transizione dalla quarta casella alla quinta casella, un metodo di lavoro (il metodo
riduce
) somma i prezzi delle vendite di DVD.Il metodo
di Java riduce
prende due parametri:
Il primo parametro è un valore iniziale.
Nell'immagine sopra, il valore iniziale è
0. 0
.
Il secondo parametro è
Operatore binario
.
Nell'immagine sopra, il
riduce
il metodo
Operatore binario
è
(prezzo1, prezzo2) -> prezzo1 + prezzo2
Il metodo
riduce
usa il suo
BinaryOperator
per combinare i valori del flusso in entrata. Il valore iniziale funge da punto di partenza per tutte le combinazioni. Quindi, il
riduci il metodo
fa due aggiunte.
Il metodo reduce aggiunge due valori da un flusso in entrata.
riduci (10. 0, (valore1, valore2) -> valore1 * valore2)
con lo stream i cui valori includono
3. 0
,
2. 0
e
5. 0
. L'azione risultante è mostrata sotto
Il metodo reduce moltiplica i valori da un flusso in entrata.
Potresti aver sentito parlare del modello di programmazione MapReduce di Google. La somiglianza tra il nome del modello di programmazione e i nomi dei metodi Java mappa
e
riduce
non è una coincidenza.
Nel complesso, l'intera assemblea allinea i prezzi dei DVD venduti. Il codice sopra contiene un programma completo che utilizza gli stream e le espressioni lambda della prima immagine sopra.
importazione java. testo. NumberFormat;
importazione java. util. Lista di array;
public class TallySales {
public static void main (String [] args) {
ArrayList
sales = new ArrayList <> ();
fillTheList (vendite);
doppio totale = vendite. flusso ()
. filtro ((vendita) -> vendita. getItem (). equals ("DVD"))
. mappa ((vendita) -> vendita. getPrice ())
. ridurre (0, 0, (prezzo1, prezzo2) -> prezzo1 + prezzo2);
Sistema. su. println (formato valuta (totale));
}
static void fillTheList (ArrayList
vendite) {
vendite. aggiungi (nuova vendita ("Libro", 12. 00));
vendite. aggiungi (nuova vendita ("DVD", 21. 00));
vendite. aggiungi (nuova vendita ("CD", 5. 25));
}
}
Il codice richiede Java 8 o successivo. Se l'IDE è impostato per una versione precedente di Java, potrebbe essere necessario armeggiare con le impostazioni dell'IDE. Potrebbe persino essere necessario scaricare una versione più recente di Java.
La grassetto è una grande dichiarazione di assegnazione Java. Il lato destro dell'istruzione contiene una sequenza di chiamate di metodo. Ogni chiamata al metodo restituisce un oggetto e ognuno di questi oggetti è la cosa prima del punto nella successiva chiamata al metodo. Ecco come si forma la catena di montaggio.
Ad esempio, vicino all'inizio del codice in grassetto, il nome
vendite
si riferisce a un oggetto
ArrayList
. Ogni oggetto
ArrayList
ha un metodo
flusso
. Nel codice sopra,
vendite. stream ()
è una chiamata a quel
ArrayList
metodo
stream
dell'oggetto.
Il metodo stream restituisce un'istanza della classe
Stream
di Java. (Che sorpresa!) Quindi
vendite. stream ()
si riferisce ad un oggetto
Stream
.
Ottenere tutte le vendite di DVD.
Stream
ha un metodo
filtro
. Così
vendite. flusso (). filter ((sale) -> sale. getItem (). equals ("DVD"))
è una chiamata al metodo
Stream
dell'oggetto
filtro
.
Il modello continua. Il metodo
Stream
dell'oggetto
mappa
restituisce ancora un altro oggetto
Stream
- un oggetto
Stream
contenente prezzi.
Ottenere il prezzo da ogni vendita di DVD.
Flusso
dei prezzi si applica il
riduci il metodo
, che produce un valore
doppio
- il totale dei prezzi del DVD.
Ottenere il prezzo totale di tutte le vendite di DVD.