1. データ変換

このStream<T>クラスには、データをある型から別の型に変換できるメソッドもあります。この方法は ですmap()

また、ストリームも返しますが、要素のタイプが異なります。このmap()メソッドは、あるデータ型を別のデータ型に変換する関数をメソッド引数として受け取ります。

例:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map((x) -> String.valueOf(x));
ストリームからストリームIntegerへの変換String

メソッドに渡される関数の引数はmap()数値を受け取りx、その文字列表現を返します。ちなみに、このコードをよりコンパクトに書くこともできます。

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
ストリームからストリームIntegerへの変換String

文字列を数値に変換する

同様に、文字列を数値に変換するコードを書くこともできます。これも複雑ではありません。

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<String> stream2 = stream.map(String::valueOf);
Stream<Integer> stream3 = stream2.map(Integer::parseInt);
ストリームからストリームStringへの変換Integer

文字列を に変換する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 );
ストリームからストリームStringへの変換URI

コレクションを作成し、それに 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 回考えてください。