Ce ne promite tranziția către baza de cunoștințe java 8?

Nu cu mult timp în urmă a ajuns la mâinile până la luarea în considerare a Java 8. După citirea Java 8 și Java Tutorial Stream 8 a fost interesant de a experimenta și de a înțelege ceea ce ne așteptăm de la inovațiile fundamentale, precum și - dacă acestea vor fi în măsură să simplifice cumva deja dificilă destinul Automator. Rezultatele detaliate ale experimentului pot fi găsite în blogul meu.

Să începem cu exemplul, care a fost dat într-unul din subiectele recente. Cu toții ne-am confruntat cu probleme de așteptări ale oricăror elemente de pe pagină. Fiind una dintre soluțiile posibile poate fi implementarea findElement personalizat:

findElement.png 986x221 15,1 KB

Aici folosim o singură condiție - ExpectedConditions.visibilityOfElementLocated. Pentru scenariile comune acest lucru poate fi destul. Dar dacă avem nevoie de ceva universal, atunci nu putem face fără biciclete.

funcInt.png 1337x269 20 KB

De fapt, în plus față de locator și timeout, intrarea este dată funcției 1 intrare (By) / 1 output (ExpectedCondition ). Apropo, poate fi o interfață funcțională personalizată.

Dacă analizăm cu atenție semnătura și tipul de returnare a celor mai interesante metode din clasa ExpectedConditions. vom observa că ele sunt ideale pentru funcția noastră. Ca rezultat, folosind un simbol special :: putem să ne referim la metodele statice ale clasei de care avem nevoie și să le transmitem drept unul dintre parametrii findElement.

Acestea sunt așa-numitele referințe ale metodelor. Apropo, putem folosi legături nu numai cu metode statice, ci și pentru a accesa metode de obiecte specifice. Cât de ușor a devenit pentru a scrie metode universale, nu?

În plus, probabil ați observat un design la fel de interesant - Opțional. Aceasta este o interfață funcțională încorporată, care este ideală pentru validarea obiectelor care pot fi nul. În cazul NullPointerException, Optional.ofNullable (Object) va sari direct în blocul orElse, ceea ce ne va oferi o anumită valoare implicită. În plus, această interfață funcțională încorporată, ca oricare alta, ne oferă acces la noile caracteristici ale Java 8, dintre care una este filtrarea flexibilă folosind expresii lambda. Astfel, folosind tehnica de legare a metodei. Am verificat obiectul pentru nul, a fost filtrat de numere non-negative și am furnizat o valoare implicită pentru cazul neacordării validării. Este util? Să mergem mai departe.

Ca alternativă la ciclurile din Java 8 au apărut fluxuri. care ne permit să scriem coduri și mai flexibil. Apropo, dezvoltatorii au prevăzut și fluxuri paralele (cred că numele vorbește de la sine).

De exemplu, vă voi arăta cum să obțineți o listă de elemente de text dintr-o colecție de elemente Web.

Ce ne promite tranziția către baza de cunoștințe java 8?

Nimic supranatural: ocolirea ciclică obișnuită a elementelor, cu păstrarea textului care a fost eliberat de pe o listă nouă. Acum, să vedem cum arată fluxurile:

Ce ne promite tranziția către baza de cunoștințe java 8?

După cum puteți vedea, nu mai sunt necesare colecții intermediare. Referința la flux () implică aceeași ocolire ciclică. hartă (expresia lamda) vă permite să convertiți fiecare element al unui obiect de colecție într-o entitate nouă. Și se colectează cu clasa inteligentă de utilitate Colectorii vor returna o nouă colecție de obiecte care au fost anterior eliminate. Apropo, la ieșire putem obține orice, chiar și Harta. Confortabil? Să mergem mai departe.

Ultimul exemplu mai complex, legat de toate fluxurile. Într-un subiect recent, am dat un exemplu de implementare a șabloanelor personalizate cu ajutorul Mustache. De fapt, informațiile pentru umplere au fost luate din interiorul rezultatelor TestNG ale structurii, ceea ce, apropo, nu este foarte banal.

Pentru a forma raportul necesar al cercetașului, am trecut prin apartamente, luând simultan rezultatele, care au fost, de asemenea, de dorit să fie sortate folosind comenzile personalizate. Toate aceste lucrări au fost apoi salvate în entitatea Suite / TestResult pentru prelucrare ulterioară. Arata cam asa:

Ce ne promite tranziția către baza de cunoștințe java 8?

scope.png 1074x682 45.6 KB

Și aceasta este doar o mică parte din ceea ce de obicei trebuie eliminat pentru a forma un raport. Acum, să examinăm modificarea Java 8:

Ce ne promite tranziția către baza de cunoștințe java 8?

nou% 2Bscope.png 1160x487 41.1 KB

După cum ați înțeles deja, am scăpat de colecțiile intermediare (flux). Elementele (dacă) au fost înlocuite cu filtre. Entitățile rezultate au fost pregătite de colecționari (Collectors.toList ()), cu transformarea preliminară a obiectelor (harta (labmda)). Apoteoza a apărut aici, comparativii personalizați, implementați direct pe zbor cu ajutorul sortului + lambda. Și aceasta este doar o parte din posibilitățile fluxurilor.

Articole similare