1. Penukaran data

Kelas ini Stream<T>juga mempunyai kaedah yang membolehkan anda menukar data daripada satu jenis kepada yang lain. Kaedah ini adalah map().

Ia juga mengembalikan strim, tetapi dengan unsur jenis yang berbeza. Kaedah map()mengambil sebagai hujah kaedah fungsi yang menukar satu jenis data kepada yang lain.

Contoh:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
Menukar Integeraliran kepada Stringaliran

Argumen fungsi yang dihantar kepada map()kaedah mengambil nombor xdan mengembalikan perwakilan rentetannya. Dengan cara ini, anda boleh menulis kod ini dengan lebih padat:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Menukar Integeraliran kepada Stringaliran

Menukar rentetan kepada nombor

Begitu juga, anda boleh menulis kod untuk menukar rentetan kepada nombor — ini juga tidak rumit:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
Menukar Stringaliran kepada Integeraliran

Menukar rentetan kepada aURI

Operasi penukaran data boleh menjadi intensif sumber dan masa. Katakan kita mahu menukar koleksi rentetan kepada objek URI. Ini sangat mudah dilakukan, kerana pembina URI mengambil rentetan sebagai hujah.

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 );
Menukar Stringaliran kepada URIaliran

Kami mencipta koleksi dan mengisinya dengan 3 alamat web. Kemudian kami mendapat Stream<String>objek dari koleksi, dan seterusnya dari aliran itu kami mendapat objek Stream<URI>. Kami meluluskan kaedah peta sebagai rujukan kepada kaedah yang akan digunakan untuk menukar setiap String kepada URI.

Kaedah ini (pembina) mesti mengambil a Stringsebagai hujah. Semuanya nampak sempurna...


2. Pengecualian

Kami mungkin menjangkakan bahawa kod di atas sepatutnya berfungsi, tetapi tidak - program tidak akan dikompil. Dan bukan kerana kami membuat kesilapan di suatu tempat, tetapi kerana pencipta Java telah membuat kesilapan.

Pada suatu masa dahulu, mereka mempunyai idea bernas untuk menambah pengecualian bertanda ( URISyntaxException) kepada URIpembina kelas! Dan pengecualian sedemikian mesti dibalut dengan try-catch.

Jadi baris terakhir kod kami akan kelihatan seperti ini:

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

Apa yang boleh kita katakan? Anda harus berfikir dua kali sebelum menggunakan pengecualian yang diperiksa . Dan berfikir tiga kali sebelum menggunakannya dalam pembina.