1. Conversia datelor
Clasa Stream<T>
are, de asemenea, o metodă care vă permite să convertiți datele de la un tip la altul. Această metodă este map()
.
De asemenea, returnează un flux, dar cu elemente de alt tip. Metoda map()
ia ca argument de metodă o funcție care convertește un tip de date în altul.
Exemple:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Argumentul funcției transmis metodei map()
ia un număr x
și returnează reprezentarea lui șir. Apropo, puteți scrie acest cod mai compact:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Transformarea unui șir într-un număr
În mod similar, puteți scrie cod pentru a converti un șir într-un număr - nici acest lucru nu este complicat:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Convertirea unui șir în aURI
Operațiunile de conversie a datelor pot necesita resurse și timp. Să presupunem că vrem să convertim o colecție de șiruri de caractere în obiecte URI. Acest lucru este foarte ușor de făcut, deoarece constructorul URI ia un șir ca argument.
ArrayList<String> list = new ArrayList<String>();
list.add("https://google.com");
list.add("https://linkedin.com");
list.add("https://yandex.com");
Stream<URI> stream = list.stream().map( URI::new );
Am creat o colecție și am populat-o cu 3 adrese web. Apoi am luat un Stream<String>
obiect din colecție și, la rândul nostru, din acel flux am luat un Stream<URI>
obiect. Am transmis metodei map o referință la metoda care va fi folosită pentru a converti fiecare șir într-un URI.
Această metodă (constructor) trebuie să ia a String
ca argument. Totul pare a fi perfect...
2. Excepții
Ne-am putea aștepta ca codul de mai sus să funcționeze, dar nu va funcționa - programul nu se va compila. Și nu pentru că am greșit undeva, ci pentru că creatorii lui Java s-au încurcat.
Cândva, au avut ideea genială de a adăuga o excepție bifată ( URISyntaxException
) la URI
constructorul clasei! Și astfel de excepții trebuie să fie înfășurate într-un try-catch
.
Deci ultima linie a codului nostru va arăta astfel:
Stream<URI> stream = list.stream().map(str ->
{
try
{
return new URI(str);
}
catch (URISyntaxException e)
{
e.printStackTrace();
return null;
}
});
Ce putem spune? Ar trebui să vă gândiți de două ori înainte de a utiliza o excepție bifată . Și gândiți-vă de trei ori înainte de a le folosi într-un constructor.
GO TO FULL VERSION