Una rapida introduzione a Java 8 Lambdas
Se sei un programmatore Java e sei interessato a saperne di più su Java 8 lambda, in questo articolo daremo un'occhiata più da vicino alla sintassi e all'uso di lambda.
UN espressione lambda in Java è un modo conciso per esprimere un metodo di una classe in un'espressione. Ha una lista di parametri e un corpo. Il corpo può essere una singola espressione o un blocco 10 Concetti fondamentali di Java da imparare quando si inizia 10 Concetti fondamentali di Java da imparare quando si inizia Se si sta scrivendo una GUI, si sviluppa un software lato server o un'applicazione mobile con Android, imparare Java ti servirà bene. Ecco alcuni concetti base di Java per aiutarti a iniziare. Leggi di più . È comunemente usato dove è richiesta un'implementazione di un'interfaccia. Questa necessità di solito si presenta quando un'interfaccia è richiesta come argomento per richiamare un metodo.
Alcune semplici espressioni Lambda
Vediamo alcuni semplici esempi di espressioni lambda.
La seguente è un'espressione lambda che accetta due numeri X e y e calcola la somma.
(int x, int y) -> x + y;
Rilascia i tipi di parametri per una rappresentazione più concisa:
(x, y) -> x + y;
Definire una funzione che non accetta parametri:
() -> 404;
È anche valido quanto segue, che non accetta parametri e non restituisce nulla:
() ->
Nessuna necessità di paranthes che racchiuda i parametri per un singolo parametro:
x -> x + 1
Sono anche possibili blocchi di codice più complessi. Il seguente lambda accetta un singolo linea parametro e fa qualche elaborazione su di esso. Si noti che il tipo del parametro viene dedotto dal contesto circostante:
line -> String [] x = pattern.split (line); return new Player (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]));
Codifica pulita e concisa
L'uso delle espressioni lambda aiuta a rendere il tuo codice pulito e conciso. Per facilitare questo, le classi Java 8 fanno ampio uso di lambda.
In loop su un elenco o un set
Classi di raccolta come Elenco, Impostato, Coda, e tale attuare il iterable interfaccia che rende molto più facile il looping sugli elementi.
Dichiara un elenco di nomi.
Elenco names = Arrays.asList ("Joe", "Jack", "James", "Albert");
Passa sopra la lista senza lambda:
for (Nome stringa: nomi) System.out.println (nome);
Usando lambda, il ciclo sopra può essere scritto come:
names.forEach (nome -> System.out.println (nome));
Con i riferimenti al metodo Java 8, quanto sopra può essere scritto in modo ancora più conciso come:
names.forEach (System.out :: println);
In loop su una mappa
UN Carta geografica è una mappatura delle chiavi ai valori. Il ciclo su una mappa prevede il loop su ciascuna delle mappe (chiave, valore). Confronta come puoi usare lambda per questo situtation.
Prima definisci una mappa:
Carta geografica map = new HashMap <> (); map.put ("Atlanta, Georgia", 110); map.put ("Austin, Texas", 115); map.put ("Baltimora, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98);
Puoi scorrere su questa mappa nel modo tradizionale:
per (Map.Entry e: map.entrySet ()) System.out.println (e.getKey () + "=>" + e.getValue ());
Ecco come puoi fare la stessa cosa in modo rapido e conciso usando lambda:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Interfacce funzionali
Qual è il tipo di ritorno di un'espressione lambda? In altre parole, qual è il tipo di X nella seguente dichiarazione?
X x = a -> a + 1;
Il tipo di ritorno di un'espressione lambda è a interfaccia funzionale - un'interfaccia con un singolo metodo astratto. È possibile assegnare un'espressione lambda a un'interfaccia con un metodo astratto compatibile. Alcuni esempi qui sotto.
Creazione di un'attività multi-threaded
Prendi in considerazione la creazione di un'attività per l'esecuzione in un thread separato 4 Metodi per scrivere codice multi-thread in Java 4 Metodi per scrivere codice multi-thread in Java In questo articolo, confrontiamo alcune delle opzioni per scrivere codice multi-thread in Java, quindi puoi giudicare meglio quale opzione usare per il tuo prossimo progetto Java. Ulteriori informazioni: è necessario definire l'attività come Runnable interfaccia e implementa il correre() metodo. Qui Runnable è un'interfaccia funzionale.
class MyTask implementa Runnable ... public void run () // implementa qui il tuo task System.out.println ("Esecuzione in un thread separato ora"); ...
È quindi possibile creare un'istanza di Il mio compito classe e usarlo per iniziare un nuovo thread di esecuzione.
Task MyTask = new MyTask (); Thread thread = new Thread (task); Thread.start ();
Usando un lambda, il processo di creazione di un Runnable diventa molto più facile. La definizione dell'attività sopra può essere riscritta come:
Runnable task = () -> System.out.println ("Esecuzione in un thread separato ora.");
O anche:
Thread thread = new Thread (() -> System.out.println ("Esecuzione in un thread separato ora.")); Thread.start ();
Confronto usando un comparatore
Il comparatore è un'interfaccia funzionale per confrontare oggetti di un determinato tipo. Definisce un singolo metodo astratto chiamato confrontare() che può essere definito usando un'espressione lambda.
Ecco un'espressione lambda che crea a comparatore usato per confrontare stringhe senza distinzione tra maiuscole e minuscole.
comparatore cmp = (x, y) -> x.compareToIgnoreCase (y);
Una volta un'istanza del comparatore l'interfaccia funzionale è stata creata, può essere riutilizzata come richiesto.
Qui, ordiniamo una lista di stringhe in ordine crescente.
Elenco names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (nomi, cmp); names.forEach (System.out :: println); // stampa Albert Jack James Joe
La lista sopra è ordinata sul posto. Ora possiamo cercarlo usando il binarySearch () metodo come segue:
System.out.println ("search (Joe):" + Collections.binarySearch (nomi, "Joe", cmp)); # stampa ricerca (Joe): 3
Calcolare il massimo e il minimo da una lista è anche facile usando lambda.
Definire alcuni dati:
Elenco temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Utilizzare un'espressione lambda per definire il comparatore:
comparatore cmpTemp = (x, y) -> Integer.compare (x, y);
E stampa il massimo e il minimo:
System.out.println ("------ Max / Min ------"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Utilizzare nella programmazione GUI
Le espressioni Lambda sono anche estremamente utili nella programmazione GUI per implementare i gestori di eventi. Ecco un esempio di utilizzo di un gestore di clic del pulsante.
Pulsante JButton = nuovo JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Pulsante cliccato!"));
E questo è stato un rapido sguardo all'uso di lambdas in Java 8.
I lambda ti hanno semplificato la vita da Java 8? Si prega di spiegare nei commenti qui sotto.
Scopri di più su: Java.