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));
Argumen fungsi yang diteruskan ke map()
metode mengambil angka x
dan 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 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 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 );
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 String
sebagai 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 URI
konstruktor 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.
GO TO FULL VERSION