1. データ変換
このStream<T>
クラスには、データをある型から別の型に変換できるメソッドもあります。この方法は ですmap()
。
また、ストリームも返しますが、要素のタイプが異なります。このmap()
メソッドは、あるデータ型を別のデータ型に変換する関数をメソッド引数として受け取ります。
例:
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
メソッドに渡される関数の引数はmap()
数値を受け取りx
、その文字列表現を返します。ちなみに、このコードをよりコンパクトに書くこともできます。
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
文字列を数値に変換する
同様に、文字列を数値に変換するコードを書くこともできます。これも複雑ではありません。
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
文字列を に変換するURI
データ変換操作はリソースと時間を大量に消費する可能性があります。文字列のコレクションを URI オブジェクトに変換したいとします。URI コンストラクターは引数として文字列を取るため、これは非常に簡単に実行できます。
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 );
コレクションを作成し、それに 3 つの Web アドレスを入力しました。次に、コレクションからオブジェクトを取得しStream<String>
、さらにそのストリームからオブジェクトを取得しましたStream<URI>
。各文字列を URI に変換するために使用されるメソッドへの参照をマップ メソッドに渡しました。
String
このメソッド (コンストラクター) は引数として を受け取る必要があります。すべてが完璧に見える...
2. 例外
上記のコードは機能するはずだと期待するかもしれませんが、実際は機能せず、プログラムはコンパイルされません。それは私たちがどこかで間違いを犯したからではなく、Java の作成者が失敗したからです。
かつて、彼らはクラス コンストラクターURISyntaxException
にチェック例外 ( )を追加するという素晴らしいアイデアを思いつきましたURI
。そして、そのような例外は . でラップする必要がありますtry-catch
。
したがって、コードの最後の行は次のようになります。
Stream<URI> stream = list.stream().map(str ->
{
try
{
return new URI(str);
}
catch (URISyntaxException e)
{
e.printStackTrace();
return null;
}
});
何と言えますか? チェック例外を使用する前に、よく考えてください。コンストラクターで使用する前に 3 回考えてください。
GO TO FULL VERSION