Annonse

Hvis du er en Java-programmerer og er interessert i å lære mer om Java 8 lambdas, vil vi i denne artikkelen se nærmere på lambda-syntaks og bruk.

EN lambda-uttrykk i Java er en kortfattet måte å uttrykke en metode for en klasse i et uttrykk. Den har en liste over parametere og et organ. Kroppen kan være en singel uttrykk eller en blokk 10 Core Java-konsepter du bør lære når du kommer i gangEnten du skriver et GUI, utvikler serversiden programvare, eller en mobil applikasjon som bruker Android, vil lære Java tjene deg godt. Her er noen kjerne Java-konsepter som hjelper deg å komme i gang. Les mer . Det brukes ofte der en implementering av et grensesnitt er nødvendig. Dette behovet oppstår vanligvis når et grensesnitt kreves som argument for å påkalle en metode.

Noen enkle Lambda-uttrykk

La oss se på noen enkle eksempler på lambda-uttrykk.

Følgende er et lambda-uttrykk som godtar to tall x og y og beregner summen.

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

Slipp parametertypene for en mer kortfattet representasjon:

instagram viewer
(x, y) -> x + y; 

Definer en funksjon som ikke godtar noen parametere:

() -> 404; 

Følgende er også gyldig, som ikke godtar noen parametere og returnerer ingenting:

() -> {}

Ingen behov for paranteser som omslutter parametere for en enkelt parameter:

x -> x + 1. 

Mer komplekse kodeblokker er også mulig. Følgende lambda godtar en singel linje parameter og gjør noe behandling på den. Merk at parametertypen utledes fra den omgivende konteksten:

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

Ren og konsis koding

Å bruke lambda-uttrykk hjelper deg med å gjøre koden din ren og kortfattet. For å hjelpe til med dette bruker Java 8-klasser omfattende lambdas.

Looping over en liste eller et sett

Samlingskurs som Liste, Sett, , og slikt implementerer Iterable grensesnitt som gjør looping over elementene mye enklere.

Forklar en liste med navn.

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

Loop over listen uten lambda:

for (Strengnavn: navn) {System.out.println (navn); }

Ved bruk av lambda kan ovennevnte sløyfe skrives som:

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

Med Java 8-metodereferanser kan ovennevnte skrives enda mer kortfattet som:

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

Looping over et kart

EN Kart er en kartlegging av nøkler til verdier. Looping over et kart innebærer looping over hver av (nøkkel, verdi) kartleggingen. Sammenlign hvordan du kan bruke lambdas til denne situtasjonen.

Definer først et kart:

Kart kart = nytt HashMap <> (); map.put ("Atlanta, Georgia", 110); map.put ("Austin, Texas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98); 

Du kan sløyfe over dette kartet på tradisjonell måte:

for (Kart. Inngang e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Slik kan du gjøre det samme på en rask og kortfattet måte ved hjelp av lambdas:

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

Funksjonelle grensesnitt

Hva er returtypen til et lambdauttrykk? Hva er typen med andre ord? X i følgende uttalelse?

X x = a -> a + 1; 

Returtypen til et lambdauttrykk er en funksjonelt grensesnitt - et grensesnitt med en enkelt abstrakt metode. Du kan tilordne et lambda-uttrykk til et grensesnitt med en kompatibel abstrakt metode. Noen eksempler nedenfor.

Opprette en oppgave med flere tråder

Vurder å lage en oppgave for utførelse i en egen tråd 4 Metoder for å skrive flertrådet kode i JavaI denne artikkelen sammenligner vi noen få alternativer for å skrive flertrådet kode i Java, slik at du bedre kan bedømme hvilket alternativ du vil bruke til ditt neste Java-prosjekt. Les mer - du må definere oppgaven som en kjørbart grensesnitt og implementere løpe() metode. Her kjørbart er et funksjonelt grensesnitt.

klasse MyTask implementerer Runnable {... public void run () {// implementer oppgaven din her System.out.println ("Kjører i en egen tråd nå."); }... }

Du kan deretter opprette en forekomst av MyTask klasse og bruk den til å starte en ny utførelsestråd.

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

Ved hjelp av en lambda er prosessen med å lage en kjørbart blir mye enklere. Oppgavedefinisjonen ovenfor kan skrives om som:

Runnable task = () -> System.out.println ("Kjører i en egen tråd nå."); 

Eller:

Gjengetråd = ny tråd (() -> System.out.println ("Kjører i en egen tråd nå.")); thread.start (); 

Sammenligning ved hjelp av en sammenligning

De komparator er et funksjonelt grensesnitt for sammenligning av objekter av en gitt type. Den definerer en enkelt abstrakt metode som heter sammenligne() som kan defineres ved hjelp av et lambda-uttrykk.

Her er et lambda-uttrykk som skaper et komparator brukes til å sammenligne strenger sakensensitivt.

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

En gang et eksempel på komparator funksjonelt grensesnitt er opprettet, det kan brukes på nytt etter behov.

Her sorterer vi en liste over strenger i stigende rekkefølge.

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

Listen over er sortert på plass. Vi kan nå søke etter det ved å bruke binarySearch () metode som følger:

System.out.println ("search (Joe):" + Collections.binarySearch (navn, "Joe", cmp)); # utskrifter. søk (Joe): 3. 

Det er også enkelt å bruke lambdas å beregne maksimum og minimum fra en liste.

Definer noen data:

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

Bruk et lambda-uttrykk for å definere komparatoren:

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

Og skriv ut maksimum og minimum:

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

Brukes i GUI-programmering

Lambda-uttrykk er også ekstremt nyttige i GUI-programmering for å implementere hendelseshåndterere. Her er et eksempel på bruk av en knappeklikthåndterer.

JButton-knapp = ny JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Knappen klikket!")); 

Og det var en rask titt på å bruke lambdas i Java 8.

Har lambdas gjort livet ditt enklere siden Java 8? Vennligst forklar i kommentarene nedenfor.