Reklame

Hvis du er en Java-programmør, og du er interesseret i at lære mere om Java 8 lambdas, i denne artikel vil vi se nærmere på lambda syntax og anvendelse.

EN lambda-udtryk i Java er en kortfattet måde at udtrykke en metode til en klasse i et udtryk. Det har en liste over parametre og et organ. Kroppen kan være en enkelt udtryk eller en blok 10 Core Java-koncepter, du skal lære, når du kommer i gangUanset om du skriver en GUI, udvikler serversiden software eller en mobil applikation ved hjælp af Android, vil det at lære Java tjene dig godt. Her er nogle centrale Java-koncepter, der hjælper dig med at komme i gang. Læs mere . Det bruges ofte, hvor en implementering af en grænseflade er påkrævet. Dette behov opstår normalt, når der kræves en grænseflade som argument for at påkalde en metode.

Nogle enkle Lambda-udtryk

Lad os se på nogle enkle eksempler på lambda-udtryk.

Det følgende er et lambda-udtryk, der accepterer to tal x og y og beregner summen.

(int x, int y) -> x + y; 

Slip parametertyperne for en mere kortfattet repræsentation:

(x, y) -> x + y; 

Definer en funktion, der ikke accepterer nogen parametre:

() -> 404; 

Følgende er også gyldigt, som ikke accepterer nogen parametre og ikke returnerer noget:

() -> {}

Intet behov for parantheses, der omslutter parametre til en enkelt parameter:

x -> x + 1. 

Mere komplekse kodeblokke er også mulige. Følgende lambda accepterer en enkelt linje parameter og udfører en vis behandling på den. Bemærk, at parametertypen udledes fra den omgivende kontekst:

linje -> { Streng [] x = mønster.split (linje); returner ny spiller (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Ren og præcis kodning

Brug af lambda-udtryk hjælper med at gøre din kode ren og kortfattet. For at hjælpe med dette gør Java 8-klasser udstrakt brug af lambdas.

Looping over en liste eller et sæt

Samling klasser som Liste, Sæt, , og sådan implementerer Iterable interface, der gør looping over elementerne meget lettere.

Angiv en liste med navne.

Liste names = Arrays.asList ("Joe", "Jack", "James", "Albert"); 

Slynge over listen uden lambda:

for (String name: names) {System.out.println (name); }

Ved hjælp af lambda kan ovennævnte sløjfe skrives som:

names.forEach (navn -> System.out.println (navn)); 

Med Java 8-metodehenvisninger kan ovenstående skrives endnu mere kortfattet som:

names.forEach (System.out:: println); 

Looping over et kort

EN Kort er en kortlægning af nøgler til værdier. Looping over et kort indebærer looping over hver af (nøgle, værdi) kortlægningen. Sammenlign, hvordan du kan bruge lambdas til denne situtation.

Definér først et kort:

Kort map = nyt HashMap <> (); map.put ("Atlanta, Georgien", 110); map.put ("Austin, Texas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98); 

Du kan sløjfe over dette kort på den traditionelle måde:

til (Kort. Indgang e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Sådan kan du gøre det samme på en hurtig og præcis måde ved hjælp af lambdas:

map.forEach ((k, v) -> System.out.println (k + "=>" + v)); 

Funktionelle grænseflader

Hvad er returtypen for et lambda-udtryk? Med andre ord, hvad er typen af x i følgende udsagn?

X x = a -> a + 1; 

Returtypen for et lambda-udtryk er en funktionel interface - en grænseflade med en enkelt abstrakt metode. Du kan tildele et lambda-udtryk til en grænseflade med en kompatibel abstrakt metode. Nogle eksempler nedenfor.

Oprettelse af en multitrådet opgave

Overvej at oprette en opgave til udførelse i en separat tråd 4 Metoder til skrivning af flertrådskode i JavaI denne artikel sammenligner vi et par muligheder for at skrive multi-threaded kode i Java, så du bedre kan bedømme, hvilken mulighed du skal bruge til dit næste Java-projekt. Læs mere - du skal definere opgaven som en Runnable interface og implementere løb() metode. Her Runnable er en funktionel grænseflade.

klasse MyTask implementerer Runnable {... public void run () {// implementer din opgave her System.out.println ("Kører i en separat tråd nu."); }... }

Du kan derefter oprette en forekomst af MyTask klasse og brug det til at starte en ny tråd til udførelse.

MyTask-opgave = ny MyTask (); Trådtråd = ny tråd (opgave); thread.start (); 

Ved hjælp af en lambda er processen med at oprette en Runnable bliver meget lettere. Ovenstående opgavedefinition kan omskrives som:

Kørbar opgave = () -> System.out.println ("Kører i en separat tråd nu."); 

Eller endda:

Trådtråd = ny tråd (() -> System.out.println ("Kører i en separat tråd nu.")); thread.start (); 

Sammenligning ved hjælp af en komparator

Det komparator er en funktionel grænseflade til sammenligning af objekter af en given type. Den definerer en enkelt abstrakt metode kaldet sammenligne() som kan defineres ved hjælp af et lambda-udtryk.

Her er et lambda-udtryk, der skaber en komparator bruges til at sammenligne strenge fra sag til sans.

komparator cmp = (x, y) -> x.compareToIgnoreCase (y); 

En gang et eksempel på komparator funktionel interface er oprettet, det kan genanvendes efter behov.

Her sorterer vi en liste over strenge i stigende rækkefølge.

Liste names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (navne, cmp); names.forEach (System.out:: println); // udskrifter. Albert. Jack. James. Joe. 

Listen ovenfor er sorteret på plads. Vi kan nu søge i det ved hjælp af binarySearch () fremgangsmåde som følger:

System.out.println ("search (Joe):" + Collections.binarySearch (navne, "Joe", cmp)); # udskrifter. søgning (Joe): 3. 

Det er også nemt at bruge lambdas at beregne maksimum og minimum fra en liste.

Definer nogle data:

Liste temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88); 

Brug et lambda-udtryk til at definere komparatoren:

komparator cmpTemp = (x, y) -> Integer.com par (x, y); 

Og udskriv maksimum og minimum:

System.out.println ("Max / Min"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Brug i GUI-programmering

Lambda-udtryk er også yderst nyttige i GUI-programmering til implementering af begivenhedshåndterere. Her er et eksempel på brug af en knappeklikshåndterer.

JButton-knap = ny JButton ("Klik på mig"); button.addActionListener (e -> System.out.println ("Klik på knappen!")); 

Og det var et hurtigt kig på at bruge lambdas i Java 8.

Har lambdas gjort dit liv lettere siden Java 8? Forklar venligst i kommentarerne nedenfor.