ArrayList
以下のコードを使用して、Integer オブジェクトを含む ArrayList をプリミティブ int 配列に変換しようとすると、コンパイル時エラーが発生します:
List<Integer> x = new ArrayList<>(); int[] n = (int[]) x.toArray(int[x.size()]);
Java 8 ストリーム変換
Java 8 では、さらに効率的なアプローチには、Stream API の使用が含まれます。その方法は次のとおりです。
int[] arr = list.stream() .mapToInt(Integer::intValue) .toArray();
このコードは、リストからストリームを作成し、Integer::intValue メソッド参照を使用して各 Integer オブジェクトをそのプリミティブ int 値にマップし、次に IntStream を int 配列に変換します。 toArray() を使用しています。
エラー処理
リストに null 参照が含まれている場合、上記のコードは NullPointerException をスローします。これを回避するには、マッピング前に null 値をフィルタリングして除外します。
int[] arr = list.stream() .filter(Objects::nonNull) .mapToInt(Integer::intValue) .toArray();
例:
List<Integer> list = Arrays.asList(1, 2, 3, 4); // Convert to int[] int[] arr1 = list.stream() .mapToInt(Integer::intValue) .toArray(); // [1, 2, 3, 4] // Filter out nulls before conversion list.set(1, null); // [1, null, 3, 4] int[] arr2 = list.stream() .filter(Objects::nonNull) .mapToInt(Integer::intValue) .toArray(); // [1, 3, 4]
以上がJava で ArrayList をプリミティブ int 配列に効率的に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。