1. Verilərin çevrilməsi
Həmçinin Stream<T>
sinfində veriləri bir tipdən digərinə çevirməyə imkan verən metod var. Bu metodun adı map()
-dır.
Bu da Stream<R>
axınını qaytarır, amma artıq yeni tip elementlərlə. Metodun parametrində verilən bir tipdən digərinə çevirən funksiyanı ötürmək lazımdır.
Nümunələr:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Metoda parametr olaraq göndərilən map()
funksiyası x
ədədi qəbul edir və nəticə olaraq string qaytarır. Bu kodu daha qısa yazmaq da olar:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
String-i ədədə çevirmək
Analoji olaraq string-i ədədə çevirmək üçün də kod yaza bilərsiz — heç də çətin iş deyil:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
String-i URI
-yə çevirmək
Verilərin çevrilməsi üzrə əməliyyatlar böyük və ağır ola bilər. Gəlin bir kolleksiya string-ləri URI obyektlərinə çevirmək istədiyimizi təsəvvür edək. Əslində bunu etmək çox asandır, çünki URI konstruktora string parametrini qəbul edir.
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 );
Biz bir kolleksiya yaratdıq, ora internetdəki 3 saytın linkini əlavə etdik. Sonra kolleksiyadan Stream<String>
obyektini əldə etdik və onun da Stream<URI>
obyektini əldə etdik. Metoda isə String-dən URI-ya çevirmək üçün istifadə edilən metodun (constructor) referensini ötürdük.
Bu metod (constructor) parametr olaraq String
tipini qəbul etməlidir. Hər şey sanki ideal...
2. İstisnalar
Yuxarıdakı kod işləməlidir, amma işləməyəcək — proqram kompilyasiya olunmayacaq. Və bu, haradasa səhv etdiyimiz üçün deyil, Java tərtibatçıları səhv etdiyi üçün belədir.
Çoxdan əvvəl onların ağlına gözəl bir ideya gəldi — URI
sinfinin konstruktoruna(!) checked-istisna olan URISyntaxException
əlavə etmək. Və belə istisnaları mütləq try-catch
-a bükmək lazımdır.
Buna görə də, kodumuzun sonuncu sətri belə görünəcək:
Stream<URI> stream = list.stream().map(str ->
{
try
{
return new URI(str);
}
catch (URISyntaxException e)
{
e.printStackTrace();
return null;
}
});
İndi nə deyə bilərəm? Checked-istisnalardan istifadə edərkən iki dəfə, onları konstruktorda istifadə etmədən əvvəl isə üç dəfə fikirləşmək lazımdır.
GO TO FULL VERSION