Video: Fredrik Vraalsen on Java 8 DOs and DON'Ts 2025
Java har fancy metoder som optimal utnyttelse av strømmer og lambda-uttrykk. Med bekker og lambda-uttrykk kan du opprette en forsamlingslinje. Assembly-line-løsningen bruker begreper fra funksjonell programmering.
Samlebåndet består av flere metoder. Hver metode tar dataene, forvandler dataene på en eller annen måte, og håndterer resultatene til neste metode i kø. Her er en forsamlingslinje.
Hver boks representerer en haug med råmaterialer ettersom de forvandles langs en forsamlingslinje. Hver pil representerer en metode (eller, metaforisk, en arbeider på samlebåndet).
For eksempel, i overgangen fra den andre boksen til den tredje boksen, slår en arbeidermetode (
filter
-metoden) ut salg av varer som ikke er DVDer. Tenk deg Lucy Ricardo som står mellom den andre og tredje boksen, fjerner hver bok eller CD fra samlebåndet og kaster det uforsiktig på gulvet.
Parameteren til Java-metoden
filter
er en
Predikat
- et lambda-uttrykk hvis resultatet er
boolean
. Metoden
filter
utløser elementer som ikke passerer lambda-uttrykkets
sanne / falske
-test.
Metodenavn | Medlem av | Parameter (r) | Resultattype | Resultatverdi |
Strøm
|
Samling
(for eksempel en
ArrayList
, objekt) |
(ingen) |
Stream
|
En strøm som spretter ut elementene i samlingen |
filter
|
Stream
|
Predikere
|
Stream > En ny strøm som inneholder verdier som lambda-uttrykket returnerer
|
true
map
|
Stream
|
Funksjon
|
Stream
|
En ny strøm som inneholder resultatene av å bruke lambda-uttrykket til den innkommende strømmen
|
redusere |
Stream
|
BinaryOperator
|
Typen som brukes av
|
BinaryOperator
Resultatet av å kombinere alle verdiene i den innkommende strømmen
|
|
kartet
-metoden)
prisen
ut av hver
salg
. Fra den arbeiderens plass fremover inneholder samlebåndet bare
pris
verdier.
For å være mer presis, tar Java
map
metoden
Funksjon
som
(salg) -> salg. getPrice ()
og bruker
Funksjon
til hver verdi i en strøm. Så
kartet
-metoden tar en innkommende strøm av
salg
objekter og lager en utgående strøm av
pris
-verdier.
I overgangen fra fjerde boks til femte boks legger en arbeidermetode (redusere
-metoden) prisene på DVD-salg.Java
redusere
metoden tar to parametere:
Den første parameteren er en startverdi.
I bildet ovenfor er initialverdien
0. 0
.
Den andre parameteren er en
BinaryOperator
.
I bildet ovenfor er
redusere
metoden
BinaryOperator
(pris1, pris2) -> pris1 + pris2
Den
redusere
metoden bruker sin
BinaryOperator
for å kombinere verdiene fra den innkommende strømmen. Den opprinnelige verdien tjener som utgangspunkt for hele kombinasjonen. Så,
redusere
-metoden gjør to tillegg.
Reduksjonsmetoden legger til to verdier fra en innkommende strøm.
redusere (10.0, (verdi1, verdi2) -> verdi1 * verdi2)
med strømmen hvis verdier inkluderer
3. 0
,
2. 0
og
5. 0
. Den resulterende handlingen er vist under
Reduksjonsmetoden multipliserer verdier fra en innkommende strøm.
kartet
og
reduserer
er ikke en tilfeldighet.
Taken som helhet øker hele forsamlingslinjen prisene på DVD-er som selges. Koden ovenfor inneholder et komplett program ved hjelp av strømmer og lambda-uttrykk det første bildet ovenfor.
importer java. tekst. NumberFormat;
importer java. util. Arraylist;
offentlig klasse TallySales {
offentlig statisk tomrom hoved (String [] args) {
ArrayList
salg = ny ArrayList <> ();
fillTheList (salg);
dobbelt total = salg. strøm ()
. filter ((salg) -> salg. getItem (). likestiller ("DVD"))
. kart ((salg) -> salg. getPrice ())
. redusere (0, 0, (pris1, pris2) -> pris1 + pris2);
System. ute. println (valuta. format (totalt));
}
statisk tomt fillTheList (ArrayList
salg) {
salg. legg til (ny salg ("bok", 12.00));
salg. legg til (ny salg ("DVD", 21.00));
salg. legg til (ny Salg ("CD", 5, 25));
}
}
Koden krever Java 8 eller nyere. Hvis IDE er angitt for en tidligere Java-versjon, kan det hende du må tinker med IDE-innstillingene. Du må kanskje til og med laste ned en nyere versjon av Java.
Fetfeltet er en stor Java-oppgaveoppgave. Høyre side av setningen inneholder en sekvens av metallsamtaler. Hver metodeanrop returnerer et objekt, og hvert slikt objekt er saken før prikken i neste metodeanrop. Slik danner du forsamlingslinjen.
For eksempel, nær starten på fetfatekoden, refererer navnet
salg
til et
ArrayList
objekt. Hvert
ArrayList
objekt har en
stream
metode. I koden ovenfor,
salg. stream ()
er et kall til den
ArrayList
objektets
stream
metode.
Strømmetoden returnerer en forekomst av Java's
Stream
klasse. (Hva en overraskelse!) Så
salg. stream ()
refererer til et
Stream
objekt.
Få all DVD-salg.
Strøm
objektet har en
filter
metode. Så
salg. strøm(). filter ((salg) -> salg. getItem (). likestill ("DVD"))
er et anrop til
Stream
objektets
filter
metode.
Mønsteret fortsetter. Metoden
Stream
objektets
map
returnerer enda et
Stream
objekt - et
Stream
objekt som inneholder priser.
Hent prisen fra hver DVD-salg.
Strøm
av prisene du bruker
redusere
metoden, som gir en
dobbel
verdi - summen av DVD-prisene.
Få totalprisen på alle DVD-salg.
