🎯

【Java】配列からListへ変換

2024/02/07に公開

配列からListへ変換

配列からListへ変換する方法をいくつか紹介します。

拡張for文とadd()

// 配列(プリミティブ型)
int[] ar = {1, 2, 3};
// リスト
ArrayList<Integer> li = new ArrayList<>();

// 拡張for文とaddメソッド
for (Integer i : ar) {
    li.add(i);
}

System.out.println(li); // 出力結果 -> [1, 2, 3]

拡張for文で変換できるのですから、当然for文でも変換が可能です。ただ、for文の紹介については割愛させていただきます。どうしても知りたいという方は、下記を参考にしてください。

https://zenn.dev/goriki/articles/034-access-array-elements-using-for


Collections.addAll()

// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};
// リスト
ArrayList<Integer> li = new ArrayList<>();

// Collections.addAll
Collections.addAll(li, ar);

System.out.println(li); // 出力結果 -> [1, 2, 3]

Collections.addAll()は第一引数が要素を追加する対象のコレクションであり、第二引数以降は追加する要素です。

  • 配列の宣言
    第二引数の配列はラッパークラスのみが対象となりますので、配列をラッパークラスで宣言する必要があります。

Arrays.asList()

// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};

// Arrays.asList()
List<Integer> li = Arrays.asList(ar);

System.out.println(li); // 出力結果 -> [1, 2, 3]

Arrays.asList()は配列の要素を固定サイズのListに変換して返します。

  • 配列の宣言
    配列をラッパークラスで宣言する必要があります。

  • 要素の変更
    Arrays.asList()で返されるListは、元の配列と同じ要素を参照するため、set()を使って変更すると元の配列も変更されます。

Integer[] ar = {1, 2, 3};

// Arrays.asList()
List<Integer> li = Arrays.asList(ar);
li.set(2, 4);

System.out.println(li); // リストの出力結果 -> [1, 2, 4]
System.out.println(Arrays.toString(ar));  // 配列の出力結果 -> [1, 2, 4]
  • 要素の追加
    返されるListが固定サイズであるため、このListにadd()を使って要素の追加を行うと、例外が発生します。
// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};

// Arrays.asList()
List<Integer> li = Arrays.asList(ar);
li.add(4); // ランタイムエラー

List.of()

// 配列(ラッパークラス)
Integer[] ar = {1, 2, 3};

// List.of()
List<Integer> li = List.of(ar);

System.out.println(li); // 出力結果 -> [1, 2, 3]

List.of()は配列の要素を不変のListに変換して返します。

  • 配列の宣言
    配列をラッパークラスで宣言する必要があります。
  • 要素の変更
    返されるListが不変であるため、set()を使って要素の変更を行うと、例外が発生します。
  • 要素の追加
    返されるListが不変であるため、add()を使って要素の追加を行うと、例外が発生します。

Arrays.stream().collect(Collectors.toList())

// 配列
Integer[] ar = {1, 2, 3};

// collect(Collectors.toList())
List<Integer> li = Arrays.stream(ar).collect(Collectors.toList());

System.out.println(li); // 出力結果 -> [1, 2, 3]

collect(Collectors.toList())は、可変のリストを生成します。

  • 要素の変更
    返されるListが可変であるため、set()を使って要素の変更を行うことができます。
  • 要素の追加
    返されるListが可変であるため、add()を使って要素の追加を行うことができます。

Arrays.stream().toList()

// 配列
Integer[] ar = {1, 2, 3};

// toList();
List<Integer> li = Arrays.stream(ar).toList();

System.out.println(li); // 出力結果 -> [1, 2, 3]

toList()は、不変のリストを返します。

  • 要素の変更
    返されるListが不変であるため、set()を使って要素の変更を行うと、例外が発生します。
  • 要素の追加
    返されるListが不変であるため、add()を使って要素の追加を行うと、例外が発生します。

【参考】プリミティブ型の配列をラッパークラスのリストへ変換する方法 【boxed()】

上記のtoList()を使ったコードを例にプリミティブ型の配列をラッパークラスのリストへ変換します。

// 配列(プリミティブ型)
int[] ar = {1, 2, 3};

// boxed()
List<Integer> li = Arrays.stream(ar).boxed().toList();

System.out.println(li); // 出力結果 -> [1, 2, 3]

Discussion