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));
Integerbir akışa dönüştürmeString
Yönteme iletilen işlev bağımsız değişkeni map()bir sayı alır xve 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);
Integerbir akışa dönüştürmeString
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);
Stringbir akışa dönüştürmeInteger
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 );
Stringbir akışa dönüştürmeURI
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.
StringBu 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