JavaRush /Kurslar /All lectures for UZ purposes /Oqimlar bilan ishlash, 2-qism

Oqimlar bilan ishlash, 2-qism

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Ma'lumotlarni o'zgartirish

Shuningdek, Stream<T> klassida bir tipdagi ma'lumotlarni boshqa tipga o'zgartirish imkonini beradigan metod mavjud. Ushbu metod map() deb nomlanadi.

U ham Stream<R> oqimini qaytaradi, lekin endi yangi tipdagi elementlar bilan. Metod map() ga parametr sifatida bir tipdagi ma'lumotlarni boshqa tipdagi ma'lumotlarga o'zgartiruvchi funksiyani uzatish kerak.

Misollar:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Oqim Integer ni String oqimiga o'zgartiramiz

Metod map() ga parametr sifatida uzatilgan funksiya x raqamni qabul qiladi va natija sifatida satrni qaytaradi. Aslida, bu kodni qisqaroq yozish mumkin:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Oqim Integer ni String oqimiga o'zgartiramiz

String ni raqamga o'zgartirish

Xuddi shunday, satrni raqamga o'zgartiruvchi kodni ham yozish mumkin - bu ham qiyin emas:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Oqim String ni Integer oqimiga o'zgartiramiz

String ni URI ga o'zgartirish

Ma'lumotlarni o'zgartirish operatsiyalari kattaroq va murakkabroq bo'lishi mumkin. Masalan, biz satrlar to'plamini URI ob'ektlariga o'zgartirmoqchimiz deylik. Bu juda oson, sababi URI konstruktorga parametr sifatida satrni qabul qiladi

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 );
Oqim String ni URI oqimiga o'zgartiramiz

Biz to'plam yaratdik, unga internetdagi 3 ta sayt manzilini yozdik. So'ngra to'plamdan Stream<String> ob'ektini oldik va undan Stream<URI> ob'ektini oldik. Va map metodiga String ni URI ga o'zgartiradigan metodga havola berdik.

Ushbu metod (konstruktor) parametr sifatida String tipini qabul qilishi kerak. Hammasi ajoyib...


2. Istisnolar

Yuqoridagi kod ishlashi kerak, lekin ishlamaydi — dastur kompilyatsiya qilinmaydi. Va bu bizning xatomiz emas, balki Java dasturchilarining xatosi.

Boshqa paytlarda ular URI klassi konstruktori(!) ga checked-istisno URISyntaxException qo'shish g'oyasini o'ylab topishdi. Va bunday istisnolarni albatta try-catch ichiga o'rash kerak.

Shuning uchun, bizning kodning so'nggi qatori quyidagicha ko'rinadi:

Stream<URI> stream = list.stream().map(str ->
{
  try
  {
     return new URI(str);
  }
  catch (URISyntaxException e)
  {
     e.printStackTrace();
     return null;
  }
});

Nima deyishim mumkin? Checked-istisnolarni ishlatishdan oldin ikki marta o'ylash kerak. Va ularni konstruktorda ishlatishdan oldin uch marta.


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION