Pe noul fichah Java 8 a fost spus destul de mult. discuta în principal de circuit Stream'y, un nou API pentru a lucra cu timpul, implicit-metode în interfețe, clasa opționale și lipsa de generare permanentă.
Dar, în plus față de caracteristicile grase in Java 8-a schimbat o mulțime de perifirii standard de bibliotecă. În special, multe metode de a simplifica în mod semnificativ sarcinile de zi cu zi au fost adăugate la clasele existente. Despre ea astăzi și vom vorbi.
Deci, Top 10 cele mai vorbit despre caracteristici nu Java 8. să mergem.
String.join ()
Dar mai bine mai târziu decât niciodată. Anterior, trebuia să dansezi cu sau om StringBuilder“. Sau, opțiunea cea mai sensibilă, sau de a folosi Guava Commons-lang.
O altă opțiune pentru a utiliza Stream
În acest caz, devine posibilă prefiltrați șir gol.
Map.computeIfAbsent () / getOrDefault () / îmbinare () / putIfAbsent ()
Viața mea pentru ea, dacă scrieți în Java, atunci sunteți în proiect au un cod de genul:
Ideea este simplă. Este o mapare de la o linie într-un contor de câte ori ne-am întâlnit această linie. Doar nu trebuie să uitați să inițializa harta poziția „și zero, iar mașina virtuală în voi va arunca NullPointerException.
În Java 8, aceeași problemă este rezolvată cu ușurință:
îmbinare Metod primește o valoare cheie și o funcție care combină valoarea setată deja există pe ecran, dacă este cazul. Dacă afișajul la o valoare predeterminată a cheii nu este prezent, atunci stabilește la valoarea specificată.
Pentru fanii one garnituri, există o pohardkorney opțiune:
metode de funcționalitate, dar într-un alt context, date similare:
- computeIfAbsent () - returnează valoarea afișată sau pe o tastă sau generează aceasta, în cazul în care nu a fost;
- putIfAbsent () - adaugă valoare hărții numai dacă nu a fost acolo. Această tehnică a avut anterior doar ConcurrentMap. acum există și harta „, de asemenea;
- getOrDefault () - numele este destul de elocvent. Returnează valoarea afișajului sau transferate la o valoare prestabilită. În opinia mea, metoda nu este destul de idiomatic. Pentru a lucra cu valori lipsă a fost adăugat tip opțional. este de a fi utilizat. Prin urmare, aș adăuga o metodă: Opțional
getOptional (K-cheie). Dar cine sunt eu ...
ThreadLocal.withInitial ()
Cei care lucrează în strânsă colaborare cu multi-threading, nici o achiziție prin. Acestea sunt veterani din Vietnam, și chiar flashback-uri ale nopții ca tortură. Și acest design nu-i sperie:
Dar acum, din cauza închiderile ușor de făcut:
Files.lines () / readAllLines () / BufferedReader.lines ()
În Java 8 este făcut posibil mult mai ușor de a efectua o astfel de sarcină simplă ca citit de imagine linie. Aceasta este o altă sarcină care este necesar anterior o mulțime de cod. Acum, acest lucru:
plictisitor minut. Metoda returnează aritmetice de clasa medie * SummaryStatistics numite getAverage (). deși mai precis ar fi getMean () numele. Termenul înseamnă descrie exact media aritmetică, iar termenul mediu se referă la conceptul de valoarea medie, în general, și se poate referi la orice măsură a tendinței centrale (aritmetică, mediana, media geometrică, modul, etc.). Este demn de remarcat faptul că, chiar și în documentația pentru metoda getAverage () este conceptul apare înseamnă: „Returnează media aritmetică a valorilor înregistrate“.
O metodă similară a fost adăugat la clasa BufferedReader. astfel încât acum Stream'y disponibile peste orice InputStream „o.
Paradoxul Comparator'a
Să presupunem că aveți nevoie pentru a scrie o implementare Comparator „si crescator pentru a sorta obiecte. De obicei, comparator este după cum urmează:
Singura întrebare este cea pe care trebuie să le ia pentru a obține ordinea corectă de sortare? Știința ne spune că, dacă alegeți opțiunea de accident, apoi ghici aproximativ jumătate din cazuri. În cele din urmă, doar două opțiuni: fie să ia departe de u1 u2 sau vice-versa.
Paradoxul constă în faptul că comparator de scriere dreptul de prima dată nu funcționează aproape niciodată. Se termină totul este întotdeauna aceeași - remarcă flegmatic: „Oh, da, am luat-o imediat greșit!“.
Din fericire, acum nu este necesar. Termenul de comparație pot fi colectate de rahat și bastoane, ci mai degrabă prin referire la metodele care returnează tipuri comparabile sau entități pentru care dorim să le sortați.
PrimitiveIterator
Una dintre limitările versiunilor anterioare ale Java a fost faptul că ei nu au avut reluatorul standard de peste tipurile primitive. Dar, ca și pentru referință. Acum, cei care au o interfață PrimitiveIterator. precum și succesorii săi: PrimitiveIterator.Of [Int | Lung | dublu]. Împreună cu interfețele funcționale ale tipurilor primitive oferă o bună bază pentru lucrul cu colecții de tipuri primitive fără autobox'a.
List.replaceAll ()
Destul de metodă convenabilă, care vă permite să modificați toate elementele listei. Dacă doriți să aduceți o listă de siruri de caractere la litere mici, înainte de a trebuit să scrie ceva de genul:
Sau o versiune mai avansată:
Acum se poate face după cum urmează:
Random.ints ()
O altă posibilitate, care este aproape nici o mențiune - este ceva care poate crea număr aleatoriu de tipul dorit și gama aleatorii Stream „s:
Există metode de a crea un dublu 's (dublu ()) și lungi' s (tânjește ()).
LongAccumulator / LongAdder
Două clase care sunt mai eficiente de înlocuire pentru AtomicLong. clasa LongAdder vă permite să efectuați atomică tip aritmetică lungă. LongAccumulator acceptă rezultatele de acumulare funcția de arbitrare. Această funcție ia valoarea curentă a argumentului trecut de a acumula () returneaza rezultatul combinației logice (acumulare) cele două valori.
La primirea rezultatului tuturor elementelor sunt reduse într-un rezultat comun. Întreaga bucătărie este aluzie la noi că funcția de acumulare trebuie să fie comutativă și asociativă. În caz contrar, rezultatul va depinde de ordinea fizică a operațiunilor care clasa nu este garantată.
La contention'e înaltă două date de clasă vor fi AtomicLong mai rapid „și datorită faptului că operațiunile nu sunt efectuate într-un element comun, iar elementele grupului individual. Datorită acestui fapt, „husarii nu a venit la lovituri din cauza femeilor.“
O pereche similară de clase este de tip dublă (DoubleAdder. DoubleAccumulator).
Java Flight Recorder
În sfârșit, dar nu în ultimul rând - un nou instrumente de diagnosticare, care sunt furnizate în Oracle Java 8. Și anume, Java de zbor. Punct de vedere tehnic Jfr a apărut în versiunea 7u40, dar este un astfel de instrument important, să nu-l mai vorbim, nu pot.
Zborul Recorder este un instrument construit în JVM pentru a colecta și a diagnostica mașină virtuală în sine, precum și aplicațiile care rulează pe ea. A început echipa JMC. La Jfr are mai multe caracteristici interesante:
- în funcție de profilul informațiilor colectate, costurile Jfr de locuri de muncă poate fi foarte scăzută (mai puțin de 1% din declarația Oracle, configurația implicită la). Acest lucru vă permite să utilizați acest instrument în „lupta“ și sub sarcină;
- Jfr, spre deosebire de instrumente, cum ar fi VisualVM, poate transporta o înregistrare permanentă a informațiilor de diagnostic în tamponul de inel, și are un depozit personalizat, politica de informații de pe disc. Acest lucru vă permite să configurați mașina virtuală, astfel încât acesta este menținut constant jurnal de diagnostic și păstrați-l doar în cazul unor probleme (de exemplu, atunci când procesorul este o lipsă sistematică a). Această abordare permite obținerea de „cutii negre“, care descrie starea mașinilor și a aplicațiilor virtuale direct la momentul de manifestare a problemei. Înainte de a Jfr doar o modalitate de a izola problema a fost - să-l prind pe production'e se numește o „mână“.
Ce informații pot fi colectate Jfr? Este foarte mult, principalele puncte care cred că sunt utile:
- Prelevarea de probe de cod (care clase și metode au luat cel mai mult timp, fluxurile publice);
- Informații cu privire la toate ciclurile GC (cât de mult de memorie a fost eliberată, cât timp a durat fiecare colectare a gunoiului);
- informații Alocarea memoriei (a unei clase flux și o metodă de memorie mai alocată pentru orice tip de date izolat mai rată de eliberare de memorie în timp);
- Informații despre rețea și disc I / O;
- care Exception'y și Error'y au fost generate de aplicație;
- fluxuri de profil de blocare (care fluxuri de multe ori sunt blocate, pe care lokah / monitoare, care curge în momentul de blocare posedă aceste Blocări / monitori cel mai des).
Lista ar putea continua, dar în acest post nu pot descrie în mod adecvat Jfr. Prin urmare, interesul tuturor părților recomandă insistent să ia timp pentru a studia acest instrument extrem de util.
concluzie
Lista reală este mult mai lungă. Daca te intrebi ce altceva adăugat în Java 8, recomand cu tărie să se uite la standard biblioteca Java urmează regexp'om: @since \ s + 1.8 \ s * \ n. Veți găsi mai mult de 1.000 de intrări. Nici unul din acest blog nu va acoperi.