1. Veri dönüştürme
Sınıfın Stream<T>
ayrıca verileri bir türden diğerine dönüştürmenize izin veren bir yöntemi vardır. Bu yöntem map()
.
Ayrıca, farklı türde öğeler içeren bir akış döndürür. Yöntem map()
, bir veri türünü diğerine dönüştüren bir işlevi yöntem bağımsız değişkeni olarak alır.
Örnekler:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Yönteme iletilen işlev bağımsız değişkeni map()
bir sayı alır x
ve dize gösterimini döndürür. Bu arada, bu kodu daha derli toplu yazabilirsiniz:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Bir diziyi bir sayıya dönüştürme
Benzer şekilde, bir diziyi sayıya dönüştürmek için kod yazabilirsiniz - bu da karmaşık değildir:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Bir diziyi bir diziye dönüştürmeURI
Veri dönüştürme işlemleri kaynak ve zaman açısından yoğun olabilir. Diyelim ki bir dizi diziyi URI nesnelerine dönüştürmek istiyoruz. Bunu yapmak çok kolaydır, çünkü URI yapıcısı argüman olarak bir dizge alır.
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 );
Bir koleksiyon oluşturduk ve onu 3 web adresiyle doldurduk. Stream<String>
Sonra koleksiyondan bir nesne aldık ve karşılığında bu akıştan bir Stream<URI>
nesne aldık. Her String'i bir URI'ye dönüştürmek için kullanılacak yönteme bir referansı map yöntemine ilettik.
String
Bu yöntem (yapıcı) argüman olarak a almalıdır . Her şey mükemmel gibi görünüyor...
2. İstisnalar
Yukarıdaki kodun çalışmasını bekleyebiliriz, ancak çalışmaz - program derlenmez. Ve bir yerde hata yaptığımız için değil, Java'nın yaratıcıları işleri batırdığı için.
Bir zamanlar, sınıf kurucusuna işaretli bir istisna ( URISyntaxException
) eklemek gibi parlak bir fikirleri vardı URI
! Ve bu tür istisnalar bir try-catch
.
Böylece kodumuzun son satırı şöyle görünecek:
Stream<URI> stream = list.stream().map(str ->
{
try
{
return new URI(str);
}
catch (URISyntaxException e)
{
e.printStackTrace();
return null;
}
});
Ne söyleyebiliriz? İşaretli bir istisna kullanmadan önce iki kez düşünmelisiniz . Ve bunları bir yapıcıda kullanmadan önce üç kez düşünün.
GO TO FULL VERSION