CodeGym /Kurslar /Java SELF AZ /Potoklarla işləmək, hissə 2

Potoklarla işləmək, hissə 2

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

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));
Integer axınını String axınına çeviririk

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);
Integer axınını String axınına çeviririk

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 axınını Integer axınına çeviririk

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 );
String axınını URI axınına çeviririk

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.


Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION