En rask introduksjon til Java 8 Lambdas

En rask introduksjon til Java 8 Lambdas / programmering

Hvis du er en Java-programmerer, og du er interessert i å lære mer om Java 8 lambdas, i denne artikkelen skal vi 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 en kropp. Kroppen kan være et enkelt uttrykk eller en blokk 10 Core Java Concepts Du bør lære når du kommer i gang 10 Core Java Concepts Du bør lære når du kommer i gang Uansett om du skriver en GUI, utvikler server-side programvare eller et mobilprogram som bruker Android, lære Java vil tjene deg godt. Her er noen kjerne-Java-konsepter for å hjelpe deg med å 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 argumentet 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 aksepterer to tall x og y og beregner summen.

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

Slett parametertypene for en mer detaljert representasjon:

(x, y) -> x + y; 

Definer en funksjon som ikke aksepterer noen parametere:

() -> 404; 

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

() ->  

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

x -> x + 1 

Mer komplekse kodeblokker er også mulige. Følgende lambda aksepterer en enkelt linje parameter og gjør noe behandling på det. Merk at typen av parameteren er utledet 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 kortfattet koding

Ved hjelp av lambda-uttrykk bidrar du til å gjøre koden ren og kortfattet. For å hjelpe til med dette, gjør Java 8-klassene mye bruk av lambdas.

Looping over en liste eller et sett

Samling klasser som Liste, Sett, , og slik implementere Iterable grensesnitt som gjør looping over elementene mye lettere.

Erklære en liste over navn.

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

Loop over listen uten lambda:

for (Strenge navn: navn) System.out.println (navn);  

Ved hjelp av lambda kan den ovenfor nevnte sløyfen skrives som:

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

Med Java 8 metoden referanser, kan ovennevnte skrives enda mer konsistent 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) kartlegging. Sammenlign hvordan du kan bruke lambdas for denne situtasjonen.

Definer først et kart:

Kart map = 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 gå over dette kartet på tradisjonell måte:

for (Map.Entry e: map.entrySet ()) System.out.println (e.getKey () + "=>" + e.getValue ());  

Slik gjør du det samme på en rask og konsis måte med lambdas:

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

Funksjonelle grensesnitt

Hva er returtype av et lambda-uttrykk? Med andre ord, hva er typen av X i følgende erklæring?

X x = a -> a + 1; 

Returtypen til et lambda-uttrykk er a 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 multi-threaded oppgave

Overvei å opprette en oppgave for utførelse i en egen tråd 4 Metoder for å skrive multi-threaded kode i Java 4 Metoder for å skrive multi-threaded kode i Java I denne artikkelen sammenligner vi noen få alternativer for å skrive multi-threaded kode i Java, så du kan bedre 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.

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

Du kan da opprette en forekomst av MyTask klassen og bruk den til å starte en ny utførelsestreng.

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

Ved hjelp av en lambda, prosessen med å lage en kjørbart blir mye lettere. Oppgavedefinisjonen ovenfor kan omskrives som:

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

Eller:

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

Sammenligning ved hjelp av en komparator

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

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

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

En gang en forekomst av komparator funksjonelt grensesnitt er opprettet, det kan brukes på nytt etter behov.

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

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

Listen ovenfor er sortert på plass. Vi kan nå søke det ved hjelp av binarySearch () metode som følger:

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

Datamaskinens maksimum og minimum fra en liste er også lett å bruke lambdas.

Definer noen data:

Liste temps = 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.compare (x, y); 

Og skriv ut maksimum og minimum:

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

Bruk i GUI programmering

Lambda-uttrykkene er også svært nyttige i GUI-programmering for å implementere hendelsesbehandlere. Her er et eksempel på å bruke en knappeklikkhåndterer.

JButton-knapp = ny JButton ("klikk meg"); button.addActionListener (e -> System.out.println ("Knapp klikket!")); 

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

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

Utforsk mer om: Java.