かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

JavaでListからint[]に変換したいんだけど…

最近お仕事ではJava屋さんになってます。ちょっとしたデータをDBに突っ込むプログラムをJavaで書いたりしてる中で、Listからint[]に変換したいって思うことがありました。toArrayで楽勝楽勝と思ったら…

List<Integer> l = Arrays.asList(10, 20, 30);

int[] array = l.toArray(new int[l.size()]); // エラー!! Integer[]とint[]はboxingとかしないよねハイ…

ということで、ぐるぐる(関係ないけど、ぶれいずさん(id:bleis-tift)が頭に浮かんだ)とループを回して変換しました…。

List<Integer> l = Arrays.asList(10, 20, 30);

int[] array = new int[l.size()];
// ぐるぐるとコピーしてまわる…
for (int i = 0; i < array.length; i++) {
	array[i] = l.get(i);
}

System.out.println(Arrays.toString(array)); // {10, 20, 30}

C#とかだとこんな感じなんですけど、Javaでもっとうまい書き方ないかなぁ??

// JavaのInteger型にあたるものがないのでTupleにしてみた
var l = new List<Tuple<int>> { Tuple.Create(10), Tuple.Create(20), Tuple.Create(30) };

// 変換して配列化とかLINQのお家芸ですよね
var array = l.Select(t => t.Item1).ToArray();
Console.WriteLine(string.Join(", ", array)); // 10, 20, 30

悩ましい。