En snabb introduktion till Java 8 Lambdas
Om du är en Java-programmerare och du är intresserad av att lära dig mer om Java 8 lambdas, kommer vi i denna artikel att titta närmare på lambda-syntax och användning.
en lambda uttryck i Java är ett kortfattat sätt att uttrycka en metod för en klass i ett uttryck. Den har en lista med parametrar och en kropp. Kroppen kan vara ett enda uttryck eller ett block 10 Core Java Concepts Du bör lära dig när du kommer igång 10 Core Java Concepts Du bör lära dig när du kommer igång Oavsett om du skriver en GUI, utvecklar serverns program eller en mobil applikation med Android, lärande Java kommer att tjäna dig bra. Här är några grundläggande Java-koncept för att hjälpa dig att komma igång. Läs mer . Det används vanligtvis där en implementering av ett gränssnitt krävs. Detta behov uppstår vanligen när ett gränssnitt är nödvändigt som argumentet att åberopa en metod.
Några enkla Lambda uttryck
Låt oss titta på några enkla exempel på lambda-uttryck.
Följande är ett lambda uttryck som accepterar två siffror x och y och beräknar summan.
(int x, int y) -> x + y;
Släpp parametertyperna för en mer detaljerad representation:
(x, y) -> x + y;
Definiera en funktion som inte accepterar några parametrar:
() -> 404;
Följande är också giltigt, vilket accepterar inga parametrar och returnerar ingenting:
() ->
Inget behov av paranteser som omsluter parametrar för en enda parameter:
x -> x + 1
Mer komplexa kodblock är också möjliga. Följande lambda accepterar en singel linje parameter och gör lite bearbetning på den. Observera att typen av parametern härleds från det omgivande sammanhanget:
linje -> String [] x = pattern.split (linje); returnera ny spelare (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]));
Ren och kortfattad kodning
Att använda lambda-uttryck hjälper dig att göra din kod ren och koncis. För att hjälpa till med detta, använder Java 8-klasserna omfattande användning av lambdas.
Looping över en lista eller en uppsättning
Samlingskurser som Lista, Uppsättning, Kö, och sådan implementera Iterable gränssnitt som gör att looping över elementen mycket enklare.
Förklara en förteckning över namn.
Lista namn = Arrays.asList ("Joe", "Jack", "James", "Albert");
Loop över listan utan lambda:
för (Strings namn: namn) System.out.println (namn);
Med lambda kan ovanstående slinga skrivas som:
names.forEach (namn -> System.out.println (namn));
Med Java 8-metodreferenser kan ovanstående skrivas ännu mer kortfattat som:
names.forEach (System.out :: println);
Looping över en karta
en Karta är en kartläggning av nycklar till värden. Looping över en karta innebär looping över varje av (nyckel, värde) kartläggning. Jämför hur du kan använda lambdas för denna situtation.
Definiera först en karta:
Karta map = ny 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 slinga över den här kartan på traditionellt sätt:
för (Map.Entry e: map.entrySet ()) System.out.println (e.getKey () + "=>" + e.getValue ());
Så här kan du göra detsamma på ett snabbt och noggrant sätt med hjälp av lambdas:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Funktionella gränssnitt
Vad är returtypen för ett lambda-uttryck? Med andra ord, vad är typen av X i följande uttalande?
X x = a -> a + 1;
Returtypen för ett lambda-uttryck är a funktionellt gränssnitt - ett gränssnitt med en enda abstrakt metod. Du kan tilldela ett lambda-uttryck till ett gränssnitt med en kompatibel abstrakt metod. Några exempel nedan.
Skapa en multi-threaded uppgift
Överväg att skapa en uppgift för körning i en separat tråd 4 Metoder för att skriva flera trådar i Java 4 Metoder för att skriva flera trådade koden i Java I den här artikeln jämför vi några alternativ för att skriva flera trådar i Java, så du kan bättre bedöma vilket alternativ som ska användas för ditt nästa Java-projekt. Läs mer - du måste definiera uppgiften som en Runnable gränssnitt och implementera springa() metod. Här Runnable är ett funktionellt gränssnitt.
klass MyTask implementerar Runnable ... public void run () // implementera din uppgift här System.out.println ("Kör i en separat tråd nu."); ...
Du kan då skapa en instans av Min uppgift klass och använd den för att starta en ny tråd av körning.
MyTask uppgift = ny MyTask (); Tråd = Ny tråd (uppgift); thread.start ();
Använda en lambda, processen att skapa en Runnable blir mycket lättare. Uppgiftsdefinitionen ovan kan omskrivas som:
Runnable task = () -> System.out.println ("Körning i en separat tråd nu.");
Eller ens:
Tråd = nytt tråd (() -> System.out.println ("Körs i en separat tråd nu.")); thread.start ();
Jämförelse med hjälp av en jämförare
De jämförelse är ett funktionellt gränssnitt för att jämföra objekt av en given typ. Det definierar en enda abstrakt metod som heter jämföra() som kan definieras med hjälp av ett lambda-uttryck.
Här är ett lambda-uttryck som skapar en jämförelse används för att jämföra strängar i ett fall.
jämförelse cmp = (x, y) -> x.compareToIgnoreCase (y);
En gång en förekomst av jämförelse funktionellt gränssnitt har skapats, det kan återanvändas efter behov.
Här sorterar vi en lista med strängar i stigande ordning.
Lista namn = Arrays.asList ("Joe", "Jack", "James", "Albert"); Samlingar.sort (namn, cmp); names.forEach (System.out :: println); // skriver Albert Jack James Joe
Listan ovan är sorterad på plats. Vi kan nu söka det med hjälp av binarySearch () metod enligt följande:
System.out.println ("search (Joe):" + Collections.binarySearch (namn, "Joe", cmp)); # utskriftssökning (Joe): 3
Högsta och minsta möjliga dator från en lista är också lätt med lambdas.
Definiera vissa data:
Lista temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Använd ett lambda-uttryck för att definiera komparatorn:
jämförelse cmpTemp = (x, y) -> Integer.compare (x, y);
Och skriv ut max och minimum:
System.out.println ("------ Max / Min ------"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Används i GUI-programmering
Lambda-uttryck är också mycket användbara i GUI-programmering för att implementera händelsehanterare. Här är ett exempel på att använda en knapphanterare.
JButton button = ny JButton ("Klicka på mig"); button.addActionListener (e -> System.out.println ("Knappklickat!"));
Och det var en snabb titt på att använda lambdas i Java 8.
Har lambdas gjort ditt liv enklare sedan Java 8? Vänligen förklara i kommentarerna nedan.
Utforska mer om: Java.