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));
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);
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);
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 );
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.
GO TO FULL VERSION