Video: J-Fall 2015 Speaker Jeroen Borgers - Java 9 Performance 2024
Java heeft mooie methoden die optimaal gebruik maken van streams en lambda-expressies. Met streams en lambda-expressies kunt u een assemblagelijn maken. De assemblagelijnoplossing maakt gebruik van concepten uit functioneel programmeren.
De assemblagelijn bestaat uit verschillende methoden. Elke methode neemt de gegevens, transformeert de gegevens op de een of andere manier en geeft de resultaten door aan de volgende methode in de rij. Hier is een assemblagelijn.
Elke doos vertegenwoordigt een heleboel grondstoffen wanneer ze langs een assemblagelijn worden getransformeerd. Elke pijl vertegenwoordigt een methode (of, figuurlijk gesproken, een werknemer op de assemblagelijn).
In de overgang van het tweede vak naar het derde vak bijvoorbeeld, analyseert een werknemermethode (de
filter
-methode) de verkoop van items die geen dvd's zijn. Stel je voor dat Lucy Ricardo tussen de tweede en derde doos staat, en elk boek of elke CD uit de lopende band haalt en zorgeloos op de grond gooit.
De parameter voor Java
filter
is een
predicaat
- een lambda-uitdrukking waarvan het resultaat
boolean
is. De
filter
-methode filtert items die de
waar / vals
-test van de lambda-uitdrukking niet doorstaan.
Methode Naam | Lid van | Parameter (s) | Resultaat Type | Resultaatwaarde |
stroom
|
Verzameling
(bijvoorbeeld een
ArrayList
, object) |
(geen) |
Stream
|
Een stream die elementen van de verzameling uitspuugt |
filter
|
Stream
|
Predicate
|
Stream > Een nieuwe stream met waarden waarvoor de lambda-expressie
|
true
kaart
|
Stream
|
Functie
|
Stream
|
een nieuwe stream met de resultaten van het toepassen van de lambda-expressie op de inkomende stream
|
verminderen |
Stream
|
BinaryOperator
|
Het type gebruikt door de
|
BinaryOperator
Het resultaat van het combineren van alle waarden in de inkomende stream
|
|
kaart
-methode) de
prijs
uit elke
verkoop
. Vanaf de locatie van die medewerker bevat de assemblagelijn alleen
prijs
waarden.
Om preciezer te zijn, Java's
kaart
-methode heeft een
functie
, zoals
(verkoop) -> verkoop. getPrice ()
en past de
functie
toe op elke waarde in een stream. Dus de
kaart
-methode neemt een inkomende stroom van
verkoop
-objecten en maakt een uitgaande stroom van
prijs
-waarden.
In de overgang van het vierde vak naar het vijfde vak worden de prijzen van dvd-verkopen bij elkaar opgeteld door een werknemermethode (verlagen
).De
verlaging
-methode van Java heeft twee parameters nodig:
De eerste parameter is een beginwaarde.
In de bovenstaande afbeelding is de beginwaarde
0. 0
.
De tweede parameter is een
BinaryOperator
.
In de afbeelding hierboven is de
methode
BinaryOperator
is
(prijs1, prijs2) -> prijs1 + prijs2
de
-verminderingsmethode
gebruikt de
BinaryOperator
om de waarden van de inkomende stream te combineren. De beginwaarde dient als startpunt voor alle combinaties. Dus, de
reduceren
methode doet twee toevoegingen.
De methode verlagen voegt twee waarden toe uit een inkomende stream.
wordt opgeroepen (10. 0, (value1, value2) -> value1 * value2)
met de stream waarvan de waarden
3 bevatten. 0
,
2. 0
en
5. 0
. De resulterende actie wordt hieronder weergegeven
De methode verlagen vermenigvuldigt waarden van een binnenkomende stroom.
kaart
en
verminderen
is geen toeval.
Als geheel genomen, rangschikt de volledige assemblage de prijzen van verkochte dvd's. De bovenstaande code bevat een compleet programma met behulp van de streams en lambda-expressies de eerste afbeelding hierboven.
java importeren. tekst. Nummer formaat;
java importeren. util. ArrayList;
public class TallySales {
public static void main (String [] args) {
ArrayList
sales = new ArrayList <> ();
fillTheList (verkoop);
dubbel totaal = verkoop. stroom ()
. filter ((verkoop) -> verkoop. getItem (). equals ("DVD"))
. kaart ((verkoop) -> verkoop. getPrice ())
. verminderen (0, (prijs1, prijs2) -> prijs1 + prijs2);
Systeem. uit. println (valuta. formaat (totaal));
}
static void fillTheList (ArrayList
verkoop) {
verkoop. toevoegen (nieuwe verkoop ("boek", 12. 00));
verkoop. toevoegen (nieuwe verkoop ("DVD", 21. 00));
verkoop. toevoegen (nieuwe verkoop ("CD", 5.25));
}
}
De code vereist Java 8 of hoger. Als uw IDE is ingesteld voor een eerdere Java-versie, moet u misschien sleutelen aan de instellingen van de IDE. Mogelijk moet je zelfs een nieuwere versie van Java downloaden.
De vetgedrukte tekst is één grote Java-toewijzingsinstructie. De rechterkant van de instructie bevat een reeks methodeaanroepen. Bij elke methode-aanroep wordt een object geretourneerd en elk dergelijk object is het item vóór de punt in de volgende aanroep van de methode. Dat is hoe je de lopende band vormt.
Bijvoorbeeld, in de buurt van het begin van de vetgedrukte code verwijst de naam
verkoop
naar een
ArrayList
-object. Elk
ArrayList
-object heeft een
-stroom
-methode. In de bovenstaande code
verkopen. stream ()
is een aanroep van de
-stroom
-methode van het
ArrayList
-object.
De streammethode retourneert een exemplaar van de klasse
Stream
van Java. (Wat een verrassing!) Dus
verkopen. stream ()
verwijst naar een
Stream
-object.
Alle dvd-verkopen ontvangen.
Stream
-object heeft een
filter
-methode. Dus
verkoop. stroom(). filter ((verkoop) -> verkoop. getItem (). equals ("DVD"))
is een aanroep van de
Stream
-object
-filter
.
Het patroon gaat door. De
Stream
-objecten
-kaart
-methode retourneert nog een
Stream
-object - een
Stream
-object met prijzen.
Krijg de prijs van elke dvd-verkoop.
Stream
van prijzen past u de
verlagen
-methode toe, die een
dubbele
waarde oplevert: het totaal van de dvd-prijzen.
De totale prijs van alle dvd-verkopen ophalen.