[java]char[]をListに変換したい。

    char[] abc = new char[] { 'a', 'b', 'c' };
    List list = ...

今日2時間ぐらい、これで悩んでました。orz
できそうでできない。
結論から言うと簡単な方法はないです。


プリミティブな型の配列ではなく、参照型の配列ならできます。
可変長引数は、内部的には個々の引数の配列と同じなので、
Arrays#asList()で変換できます。

    Character[] abc = new Character[] { 'a', 'b', 'c' };
    List<Character> list = Arrays.asList(abc);
    System.out.println("list.size()="+list.size());
    System.out.println("list="+list);
/* 実行結果
list.size()=3
list=[a, b, c]
*/

でも、プリミティブ型の配列は可変長引数には展開されません。
1つのオブジェクトとして扱われます。

    Character[] abc = new Character[] { 'a', 'b', 'c' };
    List<char> list1 = Arrays.asList(abc);  // コンパイルエラー。List<char>はダメ。
    List<char[]> list2 = Arrays.asList(abc);  // 欲しいモノと違う

じゃあ、char[]からCharacter[]に変換するAPIはないのかな。
と思って探してみたけどなかったです。(ないよね?)


ちなみに、リストから配列にするには、List#toArray()でできます。
これもやはり扱えるのは参照型の配列です。

    List<Character> list = ...
    //Character[] ary = list.toArray();	// 互換性のない型 でエラー
    Character[] ary = list.toArray(new Character[list.size()]);
    System.out.println("ary="+ary);
/* 実行結果
ary=[Ljava.lang.Character;@e48e1b
*/