Integer リストを int 配列に変換する

JavaBeginner
オンラインで実践に進む

はじめに

この実験では、Java で Integer のリストを int 配列に変換するプロセスを案内します。これは、データをリストに収集した後にプリミティブ配列を扱う必要がある場合に、Java プログラミングで一般的に行われるタスクです。

この変換を達成するための 2 つの異なるアプローチを探っていきます。

  1. Java の Stream API と stream.mapToInt() メソッドを使用する
  2. Apache Commons Lang の ArrayUtils.toPrimitive() メソッドを使用する

この実験の終わりまでに、両方の方法を理解し、独自の Java アプリケーションに適用できるようになります。

実験用の Java クラスを作成する

最初のステップでは、変換方法をデモンストレーションするための Java クラスを作成します。依存関係とプロジェクト構造を管理するために Maven を使用します。

  1. まず、プロジェクトディレクトリにいることを確認します。
cd /home/labex/project
  1. Maven のソースディレクトリに新しい Java ファイルを作成します。
cd src/main/java
Java ファイルを作成する
  1. 以下の内容で IntegerListToIntArray.java を作成します。
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;

public class IntegerListToIntArray {
    public static void main(String[] args) {
        System.out.println("Converting Integer List to int Array Demo");
        System.out.println("---------------------------------------");

        // 以下のステップでここにコードを追加します
    }
}
  1. Maven を使用してコードをコンパイルします。
cd /home/labex/project
mvn compile
  1. プログラムが動作することを確認するために実行します。
mvn exec:java

コンソールにヘッダーテキストが表示されるはずです。エラーがなければ、次のステップに進む準備ができています。

Integer リストを作成して要素を追加する

このステップでは、Integer のリストを作成し、いくつかの数値を追加します。コーディングを始める前に、なぜこの変換が必要なのかを理解しましょう。

なぜ Integer のリストと int 配列を変換する必要があるのか?

Java では、数値を扱う方法が 2 つあります。

  1. プリミティブ型 (int):

    • 数値のみを格納する基本的な数値型
    • メモリ使用量が少ない
    • リストなどのコレクションで直接使用することはできない
    • 例:int x = 5;
  2. ラッパークラス (Integer):

    • 数値を含むオブジェクト
    • リストなどのコレクションで使用できる
    • 追加のメソッドや機能がある
    • 例:Integer x = 5;

私たちはしばしばリスト(Integer が必要)に数値を収集しますが、一部のメソッドではパフォーマンスを向上させるためにプリミティブな int 配列が必要です。これが、両者を変換する必要がある理由です。

Java コードを更新する

IntegerListToIntArray.java ファイルを変更して、数値のリストを作成し表示しましょう。

  1. プロジェクトディレクトリにいることを確認します。
cd /home/labex/project
  1. src/main/java/IntegerListToIntArray.java を開き、既存の print 文の後に、main メソッド内に以下のコードを追加します。
// Create a List of Integer objects
List<Integer> integerList = new ArrayList<>();

// Add some numbers to the list
integerList.add(1);
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(5);

// Display the list contents
System.out.println("Original Integer List:");
for (Integer num : integerList) {
    System.out.print(num + " ");
}
System.out.println("\n");
リストに数値を追加する
  1. プログラムをコンパイルして実行します。
mvn compile
mvn exec:java

以下のような出力が表示されるはずです。

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

この出力は、Integer のリストを正常に作成し、数値を追加できたことを確認します。次のステップでは、このリストをプリミティブな int 配列に変換する方法を学びます。

Stream API を使用してリストを配列に変換する

このステップでは、Java の Stream API を使用して Integer のリストを int 配列に変換する最初の方法を学びます。Stream API は、データのコレクションを処理するための最新かつ効率的な方法を提供します。

Java の Stream を理解する

Java の Stream は、データを段階的に処理できるパイプラインのようなものです。

  • データをソース(私たちのリスト)から取得します。
  • データを処理します(Integer を int に変換します)。
  • 結果を収集します(配列に格納します)。

変換コードを追加する

  1. プロジェクトディレクトリにいることを確認します。
cd /home/labex/project
  1. src/main/java/IntegerListToIntArray.java を開き、リスト作成コードの後に以下のコードを追加します。
// Method 1: Using Stream API
System.out.println("Converting using Stream API:");

// Convert Integer List to int array using Stream
int[] intArrayUsingStream = integerList.stream()    // Create a stream from the list
                                     .mapToInt(Integer::intValue)  // Convert Integer to int
                                     .toArray();    // Collect results into an array

// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingStream) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. プログラムをコンパイルして実行します。
mvn compile
mvn exec:java

以下のような出力が表示されるはずです。

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Converting using Stream API:
Converted int Array:
1 2 3 4 5

コードの理解

変換がどのように機能するかを分解してみましょう。

  1. integerList.stream() - リストから Stream を作成します。
  2. .mapToInt(Integer::intValue) - 各 Integer を int に変換します。
  3. .toArray() - すべての int 値を配列に収集します。

Integer::intValue はメソッド参照と呼ばれます。これは number -> number.intValue() を書く簡略表記です。

ArrayUtils を使用してリストを配列に変換する

このステップでは、Apache Commons Lang ライブラリの ArrayUtils クラスを使用してリストを変換する 2 番目の方法を学びます。この方法はより直感的で、初心者にとって理解しやすいかもしれません。

ArrayUtils の理解

ArrayUtils クラスは、配列を操作するための多くの便利なメソッドを提供します。特に toPrimitive() メソッドは、ラッパー型(Integer など)からプリミティブ型(int など)に変換するのに役立ちます。

ArrayUtils を使った変換コードを追加する

  1. IntegerListToIntArray.java ファイルの Stream API のコードの後に、以下のコードを追加します。
// Method 2: Using ArrayUtils
System.out.println("Converting using ArrayUtils:");

// First convert List<Integer> to Integer[]
Integer[] intermediateArray = integerList.toArray(new Integer[0]);

// Then convert Integer[] to int[]
int[] intArrayUsingArrayUtils = ArrayUtils.toPrimitive(intermediateArray);

// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingArrayUtils) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. プログラムをコンパイルして実行します。
mvn compile
mvn exec:java

出力には両方の変換方法の結果が表示されるはずです。

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Converting using Stream API:
Converted int Array:
1 2 3 4 5

Converting using ArrayUtils:
Converted int Array:
1 2 3 4 5

コードの理解

ArrayUtils を使った方法は 2 つのステップで動作します。

  1. integerList.toArray(new Integer[0]) - リストを Integer オブジェクトの配列に変換します。
  2. ArrayUtils.toPrimitive() - Integer 配列を int 配列に変換します。

この方法はより直感的ですが、Apache Commons Lang ライブラリが必要です。

まとめ

この実験では、Java で Integer のリストを int 配列に変換する 2 つの異なる方法を学びました。

  1. Java の Stream API を使用する方法:
int[] array = integerList.stream().mapToInt(Integer::intValue).toArray();
  • 最新の関数型アプローチ
  • Java に組み込まれている
  • データを段階的に処理するのに適している
  1. Apache Commons Lang の ArrayUtils を使用する方法:
int[] array = ArrayUtils.toPrimitive(integerList.toArray(new Integer[0]));
  • より直感的なアプローチ
  • 外部ライブラリが必要
  • 理解しやすく使いやすい

両方の方法で同じ結果が得られ、あなたのニーズに合った方法を選ぶことができます。

  • 最新の関数型アプローチが必要な場合は Stream API を使用する
  • よりシンプルで読みやすいコードが必要な場合は ArrayUtils を使用する

これで、Java アプリケーションで Integer のリストと int 配列を相互に変換する知識を持つことができました。