1. Konversi data

Kelas Stream<T>juga memiliki metode yang memungkinkan Anda mengonversi data dari satu jenis ke jenis lainnya. Metode ini adalah map().

Itu juga mengembalikan aliran, tetapi dengan elemen dari tipe yang berbeda. Metode map()mengambil argumen metode sebagai fungsi yang mengubah satu tipe data ke tipe data lainnya.

Contoh:

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

Argumen fungsi yang diteruskan ke map()metode mengambil angka xdan mengembalikan representasi stringnya. Omong-omong, Anda dapat menulis kode ini dengan lebih ringkas:

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

Mengubah string menjadi angka

Demikian pula, Anda dapat menulis kode untuk mengonversi string menjadi angka — 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);
Mengubah Stringaliran menjadi Integeraliran

Mengubah string menjadi aURI

Operasi konversi data dapat memakan banyak sumber daya dan waktu. Katakanlah kita ingin mengonversi kumpulan string menjadi objek URI. Ini sangat mudah dilakukan, karena konstruktor URI menggunakan string sebagai argumen.

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 );
Mengubah Stringaliran menjadi URIaliran

Kami membuat koleksi dan mengisinya dengan 3 alamat web. Kemudian kami mendapat Stream<String>objek dari koleksi, dan pada gilirannya dari aliran itu kami mendapat objek Stream<URI>. Kami melewati metode peta referensi ke metode yang akan digunakan untuk mengonversi setiap String menjadi URI.

Metode ini (konstruktor) harus mengambil a Stringsebagai argumen. Segalanya tampak sempurna...


2. Pengecualian

Kita mungkin berharap bahwa kode di atas akan berfungsi, tetapi ternyata tidak — program tidak dapat dikompilasi. Dan bukan karena kami membuat kesalahan di suatu tempat, tetapi karena pembuat Java membuat kesalahan.

Sekali waktu, mereka memiliki ide cemerlang untuk menambahkan pengecualian yang dicentang ( URISyntaxException) ke URIkonstruktor kelas! Dan pengecualian tersebut harus dibungkus dalam file try-catch.

Jadi baris terakhir dari kode kita akan terlihat seperti ini:

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

Apa yang bisa kita katakan? Anda harus berpikir dua kali sebelum menggunakan pengecualian yang dicentang . Dan pikirkan tiga kali sebelum menggunakannya dalam konstruktor.