Video: Week 9 2025
Java har fancy metoder, der optimerer brugen af strømme og lambda udtryk. Med vandløb og lambda udtryk kan du oprette en samlebånd. Assembly-line-løsningen bruger koncepter fra funktionel programmering.
Samlebåndet består af flere metoder. Hver metode tager dataene, omdanner dataene på en eller anden måde og henter resultaterne til den næste metode i køen. Her er en samlebånd.
Hver kasse repræsenterer en masse råvarer, da de omdannes langs en samlebånd. Hver pil repræsenterer en metode (eller, metaforisk, en arbejder på samlebåndet).
I overgangen fra den anden boks til den tredje boks udskilles en arbejdsmetode metode (metoden
filter
) salg af varer, der ikke er dvd'er. Forestil dig Lucy Ricardo, der står mellem den anden og den tredje boks, fjerner hver bog eller cd fra samlebåndet og smider det skødesløst på gulvet.
Parameteren til Java's
filter
metode er en
Predikat
- et lambda udtryk, hvis resultat er
boolean
. Metoden
filter
udskifter elementer, der ikke passer lambda-udtryksværdien
true / false
.
Metodenavn | Medlem af | Parameter (r) | Resultattype | Resultatværdi |
strøm
|
Samling
(for eksempel en
ArrayList
, objekt) |
(ingen) |
Stream
|
En strøm, der springer ud af elementer i samlingen |
filter
|
Stream
|
Predikér
|
Stream > En ny strøm indeholdende værdier, for hvilke lambda-udtrykket returnerer
|
true
map
|
Stream
|
Funktion
|
Stream
|
En ny strøm, der indeholder resultaterne af at anvende lambda-udtrykket til den indkommende strøm
|
reducere |
Stream
|
BinaryOperator
|
Den type, der bruges af
|
BinaryOperator
Resultatet af at kombinere alle værdierne i den indkommende strøm
|
|
map
)
prisen
ud af hver
salg
. Fra arbejdstagerens sted fremover indeholder samlebåndet kun
pris
værdier.
For at være mere præcis tager Java's
map
metode
Funktion
som f.eks.
(salg) -> salg. getPrice ()
og anvender
Funktionen
til hver værdi i en strøm. Så metoden
map
tager en indkommende strøm af
salg
objekter og skaber en udgående strøm af
pris
værdier.
I overgangen fra den fjerde boks til den femte boks tilføjer en arbejdstager metode (reducere
metoden) prisen på dvd-salg.Java's
reducere
metode tager to parametre:
Den første parameter er en indledende værdi.
I billedet ovenfor er den indledende værdi
0. 0
.
Den anden parameter er en
BinaryOperator
.
I billedet ovenfor er
reducere
metoden
BinaryOperator
(pris1, pris2) -> pris1 + pris2
reducere
metoden bruger sin
BinaryOperator
til at kombinere værdierne fra den indkommende strøm. Den indledende værdi tjener som udgangspunkt for hele kombinationen. Så
reducer
-metoden gør to tilføjelser.
Reduktionsmetoden tilføjer to værdier fra en indgående strøm.
reducere (10.0, (værdi1, værdi2) -> værdi1 * værdi2)
med strømmen, hvis værdier indbefatter
3. 0
,
2. 0
og
5. 0
. Den resulterende handling vises under
Reduktionsmetoden multiplicerer værdier fra en indgående strøm.
Kort
og
Reducer
er ikke en tilfældighed.
Taget som helhed, opsamler hele forsamlingslinjen priserne på solgte dvd'er. Koden ovenfor indeholder et komplet program ved hjælp af streams og lambda udtryk det første billede ovenfor.
importer java. tekst. TalFormat;
importer java. util. ArrayList;
offentlig klasse TallySales {
offentlig statisk tomt hoved (String [] args) {
ArrayList
salg = ny ArrayList <> ();
fillTheList (salg);
dobbelt total = salg. strøm ()
. filter ((salg) -> salg. getItem (). svarer til ("dvd"))
. kort ((salg) -> salg. getPrice ())
. reducere (0, 0, (pris1, pris2) -> pris1 + pris2);
System. ud. println (valuta. format (total));
}
statisk void fillTheList (ArrayList
salg) {
salg. tilføj (ny salg ("bog", 12,00));
salg. tilføj (ny Salg ("DVD", 21.00));
salg. Tilføj (ny Salg ("CD", 5, 25));
}
}
Koden kræver Java 8 eller nyere. Hvis din IDE er indstillet til en tidligere Java-version, skal du muligvis tinker med IDE'ens indstillinger. Du skal muligvis endda downloade en nyere version af Java.
Fetfeltet er en stor Java-opgaveopgørelse. Den højre side af sætningen indeholder en række metodeopkald. Hver metodeopkald returnerer et objekt, og hvert sådant objekt er den ting, der er før prikken i det næste metodeopkald. Sådan udgør du samlebåndet.
For eksempel henviser navnet
salg
i nærheden af starten af boldfoden til et
ArrayList
objekt. Hver
ArrayList
objekt har en
stream
metode. I koden ovenfor,
salg. stream ()
er et kald til den
ArrayList
objektets
stream
metode.
Strømmetoden returnerer en forekomst af Java's
Stream
klasse. (Hvilken overraskelse!) Så
salg. stream ()
refererer til et
Stream
objekt.
Få alle DVD-salg.
Stream
objekt har en
filter
metode. Så
salg. strøm(). filter ((salg) -> salg. getItem (). liges ("DVD"))
er et opkald til
Stream
objektets
filter
metode.
Mønsteret fortsætter. Metoden
Stream
objektets
map
returnerer endnu et
Stream
objekt - et
Stream
objekt, der indeholder priser.
Hent prisen fra hvert DVD-salg.
Stream
af de priser, du anvender
reducer
-metoden, som giver en
dobbelt
-værdi - summen af dvd-priserne.
Hent den samlede pris på alle DVD-salg.