
Michael Cain
0
4018
359
Hvis du er en Java-programmør, og du er interesseret i at lære mere om Java 8 lambdas, i denne artikel skal vi se nærmere på lambda syntax og brug.
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 et enkelt udtryk eller en blok 10 Core Java-koncepter, du skal lære, når du kommer i gang 10 Core Java-koncepter, du skal lære, når du kommer i gang, hvad enten du skriver et GUI, udvikler serversiden software eller en mobil applikation ved hjælp af Android, At lære Java vil tjene dig godt. Her er nogle centrale Java-koncepter, der hjælper dig med at komme i gang. . 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 paranteser, 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 omfattende brug af lambdas.
Looping over en liste eller et sæt
Samlingskurser som Liste, Sæt, Kø, og sådan implementere Iterable interface, der gør looping over elementerne meget lettere.
Angiv en liste med navne.
Liste navne = 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:
Kortkort = 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:
for (Map.Entry 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 erklæring?
X x = a -> a + 1;
Returtypen for et lambda-udtryk er en funktionel interface - et interface 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 Java 4 Metoder til skrivning af flertrådskode i Java I denne artikel sammenligner vi et par muligheder for at skrive multetrådkode i Java, så du kan bedre bedømme, hvilken mulighed du skal bruge til dit næste Java-projekt. - 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.
Comparator 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 navne = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (navne, cmp); names.forEach (System.out :: println); // udskriver 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)); # udskriver 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:
Comparator cmpTemp = (x, y) -> Integer.compar (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 ("Knap klikket!"));
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.