1. 序章

このクイックチュートリアルでは、他のタイプへのIntStream変換に関するすべての可能性について説明します。

このチュートリアルの補足として、ボクシングとアンボクシングまたは反復に関する興味深い読み物をお勧めします。

2. IntStreamからArray

をIntStreamオブジェクトからintの配列に変換する方法の調査を始めましょう。

この例のために、最初の50個の偶数を生成し、結果としてそれらを配列に格納してみましょう。

@Test
public void intStreamToArray() {
  int[] first50EvenNumbers = IntStream.iterate(0, i -> i + 2)
    .limit(50)
    .toArray();

  assertThat(first50EvenNumbers).hasSize(50);
  assertThat(first50EvenNumbers[2]).isEqualTo(4);
}

まず、0から始まり、各要素に2を追加して反復する、整数の無限ストリームを作成しましょう。 その直後に、この操作を何らかの方法で終了させるために、中間操作limitを追加する必要があります。

最後に、終了操作 collect を使用して、このStreamを配列に収集しましょう。

これは、 int sの配列を生成する簡単な方法です。

3. IntStreamからList

ここで、IntStreamを整数のリストに変換してみましょう。

この場合、例にさらに多様性を加えるために、メソッドiterateの代わりにメソッドrangeを使用しましょう。 このメソッドは、 int0からint50までのIntStreamを生成します(オープンレンジであるため含まれていません)。

@Test
public void intStreamToList() {
  List<Integer> first50IntegerNumbers = IntStream.range(0, 50)
    .boxed()
    .collect(Collectors.toList());

  assertThat(first50IntegerNumbers).hasSize(50);
  assertThat(first50IntegerNumbers.get(2)).isEqualTo(2);
}

この例では、メソッドrangeを使用します。  ここで最も悪名高い部分は使用していますボックス化されたメソッドは、その名前が示すように、IntStream内のすべてのint要素をボックス化し、ストリームを返します。

最後に、コレクターを使用してintegerのリストを取得できます。

4. IntStreamからString

最後のトピックでは、IntStreamから文字列を取得する方法を調べてみましょう。

この場合、最初の3つの int (0、1、および2)のみを生成します。

@Test
public void intStreamToString() {
  String first3numbers = IntStream.of(0, 1, 2)
    .mapToObj(String::valueOf)
    .collect(Collectors.joining(", ", "[", "]"));

  assertThat(first3numbers).isEqualTo("[0, 1, 2]");
}

まず、この場合、コンストラクター IntStream.of()を使用してIntStreamを作成します。 持った後ストリーム 、どういうわけかする必要がありますストリームを生成する IntStreamから 。 したがって、は中間のmapToObjメソッドを使用できます。このメソッドは、 IntStream を受け取り、呼び出されたメソッドにマップされた結果のオブジェクトのタイプのStreamを返します。

最後に、コレクターを使用します接合それはかかりますストリームの各要素を追加できますストリーム区切り文字、およびオプションでプレフィックスとサフィックスを使用します。

5. 結論

このクイックチュートリアルでは、IntStreamを他のタイプに変換する必要がある場合のすべての選択肢について説明しました。 特に、配列、 List 、およびStringを生成する例を実行しました。

また、いつものように、サンプルコードはGitHubから入手できます。