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));
Bir akışı 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);
Bir akışı 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);
Bir akışı 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 );
Bir akışı 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.