Expresiile lambda cu Java 8

între mai multe noutăți pe care Java 8 le oferă expresii de lambda.
În acest tutorial vom vedea ceea ce constau, ce tipuri există, cum ar fi crearea lor și Cum să le folosiți.

Indicele conținutului

  • 1. Introducere
  • 2. Mediu
  • 3. Tipuri
    • 3.1. Consumatori
    • 3.2. Furnizori
    • 3.3. Funcții
      • 3.3.1. Operatori Unarios
      • 3.3.2. Oponatori binari
    • 3.4. Predicatează
  • 4. Referință la metode
  • 5. Utilizați
  • 6. Concluzii
  • 7. Referințe

Introducere

Lambda Expresiile sunt funcții anonime, adică funcții care nu au nevoie de o clasă.
Sintaxa dvs. de bază este detaliată mai jos:

sintaxă

  1. Lambda operator (- >) Separă declarația parametrilor a Declarației funcției funcției.
  2. parametrii:
    • Când aveți un singur parametru, nu este necesar să utilizați parantezele.
    • Când faceți acest lucru nu au parametri sau când aveți două sau mai multe, este necesar să utilizați paranteze.
    • Lambda corp:
      • atunci când corpul expresiei lambda Are o singură linie nu este necesar să se utilizeze cheile și nu este necesar să specificați clauza de returnare în cazul în care trebuie să returneze valorile.
      • Când corpul expresiei lambda are mai multe linii, este necesar Pentru a utiliza tastele și este necesar să includeți clauza de returnare în cazul în care funcția Trebuie să returnați o valoare.

Unele exemple de expresii lambda pot fi:

  • z – > z + 2
  • () – > sistem.out.println (” mesajul 1 „)
  • INT Lungime, Int Înălțime) – > {Înălțimea de întoarcere * Lungime; }
  • (string x) – > {

    șir întoarcere = x;
    retur = retur.concat („***”);
    Întoarcere la retur;
    }

Așa cum am văzut expresii lambda sunt funcții anonime și pot fi utilizate în cazul în care tipul acceptat este o interfață funcțională, dar … Ce este o interfață Funcțional?
O interfață funcțională este o interfață cu una și doar o metodă abstractă. Declarația este exact aceeași ca și interfețele normale cu două caracteristici suplimentare:

  • are o singură metodă abstractă, așa cum am spus deja.
  • opțional poate fi testat ca @ FuncționalInterInterface.

Motivul pentru care interfața are o singură metodă abstractă este că va fi expresia lambda care va oferi implementarea acestei metode.

Aici sunt unele Exemple de interfață funcțională:

java

1
4

td>

@FunctionInInterface
Interfață publică runnable {
Rezumat public run ();

Java
1
2
3

/ TD>

Interfață publică MiInterface {
implicit vid saludia () {
sistem.Out. Println („toate cele bune!”);
}
Div> Rezumat public Int Calculați (INT DATA1, INT DATA2);

Java

Mediu

Tutorialul este scris folosind următorul mediu:

  • hardware: MacBook Pro 17 ‘(2.66 GHz Intel Core I7, 8GB DDR3 SDRAM).
  • Sistem Operațiuni: Mac OS X Lion 10.10.3.
  • Nvidia GeForce GT 330m 512Mb.
  • Crucial MX100 SSD 512 GB.

Tipuri

Lambda Expresii pot fi clasificate după cum urmează:

  • consumatori.
  • furnizori.
  • Funcții.
    • Operatori deschisi.
    • predicates.

    vom detalia unul câte unul și numărăm ceea ce constau.

    3.1. Consumatori

    Aceasta este expresiile lambda care acceptă o singură valoare și nu returnează nici o valoare.

    Java

1
2
5
6
7

/ div>

@functionalInterface
Interfață publică Comparator {
/ / implicit și static Metodele sunt edificate
int comparație (t O1, t O2);
// Metoda egală (Object OBJ) este implementată implicit de clasa de obiect.
boolean este egal (obiect obj);
}

3.2. Furnizori

În acest caz, este expresii care nu au parametri, ci returnați un rezultat.

Java
String Message – > sistem.out.println (mesaj);

Cei care iau două valori ca parametru și nu returnează rezultatul.

/div>

1

(cheia de șir, valoare de șir) – > sistem.out.println (” cheie:% s, valoare:% s% n „, Valoare cheie);

() – > retur createranndominteger ()

3.3. Funcții

Expresii care acceptă un argument și returnează o valoare ca rezultat și ale căror tipuri nu trebuie să fie la fel.

java

și returnați un rezultat.

Java

3.3.1 Operatorii Unarios

Cazul special de funcții în care atât parametrul, cât și valoarea returnată sunt de același tip.

java

iv id = ”

Comandă persistă – > persistente.etidientifier ();

rhyd>

(adresa de adrese , Nume de șir) – > persoană nouă (nume, adresă);
d

String Message – > mesaj.tolowowcacase ()
3.3.2 Operatori binari

Același lucru ca și în cazul operatorilor deschisi, este un caz special de funcții în care cele două argumente și rezultatul sunt Același tip.

java

(Mesaj de șir, altrivesc) – > mesaj.concat (altmemesage);

3.4. Predicted

Acestea sunt expresii care acceptă un parametru și returnează o valoare logică.

Java

IV id = ”

Ca și în cazurile anterioare, puteți avea bipredicat, predicate că, în loc să aveți un parametru, aveți două.

Java
d

div id = „CDD9F2F52”

String Mesaj – > Mesaj.Lungime > 50
d

(calea, ATT) – > șir.valueof (calea) .Desswith („js”) &&

attr.size () > 1024

Referințele la metode

Referințele la metode ne permit să reutilizați o metodă ca a expresia lambda. Pentru a utiliza referințele la metode, este suficient să utilizați următoarea sintaxă: ReferenceOfjective :: NameName.

iv id = „

Pentru expresii simple lambda și există 3 tipuri diferite:

  • metode statice.
  • Metode de exemplu de tip.
  • Metode de exemplu ale unui obiect existent .

Exemplu de utilizare cu metoda statică:

Java

iv id = „

d

Fișier :: Cantid // În loc de fișier f – > f.canread ();

Exemplu de utilizare cu o metodă de tip:

java

„CDD9F2F52”>

(student student , Int RegistryIndex) – > student.Gettrengists (RegisterIndex) // Lambda Expression fără referințe.
Student :: Gettretry // Lambda Expression cu referire la o metodă de tip.

/p> Java

d

(coarde info) – > sistem.out.println (info) // expresie lambda fără referințe.
System.Out :: Println // lambda expresie cu referire la metoda statică.

1

Utilizați

Așa cum avem Văzut anterior, lambdele pot fi utilizate în cazul în care tipul de parametri acceptați este o interfață funcțională. Acesta este cazul multor funcționalități oferite de java.util.stream, noul API care apare cu Java 8, care permite programarea funcțională pe un flux de valori fără structură.

Să vedem câteva exemple :

Exemplul 1:

Java

  • element – > element.getvalu == valory_to_compare: acordăm un predicat la funcția Findfirst a API-ului fluxului, această funcție va folosi predicatul pentru a reveni O opțională (o altă știre despre Java 8 care au încercat deja Daniel Díaz în tutorialul său jucând cu clasa opțională în Java 8.) CON EL PRIMER VALOR CAURA CARAFICATEA.
  • System.Out :: Println: Establecemos Un Consumidor Para La Función IFPRESENT, DE LA CLASE OPTIONAL, QUE EN CASO DE EXESIR EL VALOR, EJUCARÁ LA EXPRISIÓN LAMMDA .
  • ejemplo 2: divid id = ”

1

2

student Student – > Germarks (student) // expresie lambda fără referințe.
aceasta :: Germarks // Lambda Expression cu referire la metoda unui obiect existent.
1
3
4
5

lista alist = …
alist .Stream ()
.findfirst (element – > element.getValue () == valor_to_compare)
.ifpresent (sistem.out :: Println);

un con con congelat de que los valores enteros id se obtienen del harta.

ejemplo 3:

Java

1
3
3
4
5
6
harta < String, Integer > hartă = New TreeMap <> ();
hartă.put ….
Stringbuilder stringbuilder = nou constructor ();
hartă.Forech ((scrisoare, număr) – > stringbuilder.append (litera.concat (șir.valueof (număr))));
sistem.out.println (stringbuilder.tostring ());

el código anterior Toma ONU FICHERO, Recorre Sus Líneas, Mapea Los Valores Obtenidos de cada Linea id corespondentă con la expresión obișnuit cuvânt_regexp, filtra Aquellos Que Sean Distintos, Los Pasa A Minúscas y Los Imprime Pantalla Uno un UNO.

  • Linie – > stream.of (line.split (word_regexp)): Devuelve ONU Stream con Los Valores Obtenidos de apicar La divizión de la línea mediante la expresión regulat. El Método Flatmap Irá Recogiando Los Streams Generaldo de Esta Manera Y Los Convertirá Un Streamon Que Podrá Ser Procesado con posterioridad.
  • String :: Tolowowcase: Transforma Los Strings del Stream a MinúsCules.
  • System.out :: Println: Ya Lo Vimos Conola ANTERIORIDAD, MUSTRA POR CONOADA CADA Conexe A Las Varies Anteriores:
    • Nos Acesca A la Progración Funcional.
    • Hace Nuestro Código Más Preciso y lizibil, Mejorando, En Conseencia, Su Mantenibilidad.
    • Su utilización Junto con La API Stream Hace Más Fácil La Eucución Concurrente de Tueas. Maneras de Utilizarlas. Pendiente de posteriores Tutoriale queda Tratar Aspectos Más Avanzados Como Streams Finitos e Infinitos, Utilización de Colectores O Debugging de fluxuri Y Expresies Lambda.

      Referencias

      • JDK 8 MOOC: Lambdas și fluxuri Introducere
      • Oracle Lambda Expresii Documentație

      si quieres profundizar en esta y en el reuda de noi romane que incluye java 8, reuda que ahora puedes asistir a los cursos Públicos de „Novedades de Java 8”, Donde Te Llevaremos de la Mano Para Experimentar Y Apreditate un Sacar Todo El Partido de Todos Los Cambo del Lenguaje. Así estarás al día. Pueddes Comprobar Las Próximas Convocatoriile del Curso „Novedades Java 8”

1
2
3
5
6
încercați (cititorul de bufferedReader = fișiere.newbufferedReader (paths.ttxt „), standardCharits.utf_8) {
cititor .lines ()
.Flatmap (linia – > stream.of (line.split (word_regexp))
.distinct ( )
.map (string :: tolowercaca)