- blogs:
- cles::blog
2013/02/07

List<Integer> を toArray() で int[] にしようと思ったら・・・

久しぶりに Java でちょっとしたプログラムを書いたら List と Array の変換ではまったのでメモ。
Java では List と Array の変換は asList() や toArray() を使うとシンプルに書けるのはよく知られています。
ExampleApp.java
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
public class ExampleApp {
public static void main(String[] args) {
List<String> strList = Arrays.asList("Foo", "Bar", "Buzz");
String[] strArray = strList.toArray(new String[strList.size()]);
for (String string : strArray) {
System.out.println(string);
}
}
}
ところが、このテクニック配列が基本型だと上手くいきません。
ExampleApp2.java
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
public class ExampleApp2 {
public static void main(String[] args) {
List<Integer> intList = Arrays.asList(1,2,3);
int[] intArray = intList.toArray(new int[intList.size()]);
// int[] intArray = ArrayUtils.toPrimitive(intList.toArray(new Integer[intList.size()]));
for (int i : intArray) {
System.out.println(i);
}
}
}
一見、いけそうですがこれは Autoboxing で解決されないので、コンパイルエラーになってしまいます。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
型 List<Integer> のメソッド toArray(T[]) は引数 (int[]) に適用できません
at ExampleApp2.main(ExampleApp2.java:9)
これでは面倒なので簡単に書ける方法がないかどうか探っていたら、結局、Apache Commons Lang にたどりついてしまいました。
上記のコメントになっている部分の toPrimitive()*1 というメソッドを使えばシンプルに実装できます。Javaは基本型と参照型周りは意外とださいところが残ってますからね。。。。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5573
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112082)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110713)
3 . 年次の人間ドックへ(110326)
4 . 2023 年分の確定申告完了!(1つめ)(109875)
5 . 三菱鉛筆がラミーを買収(109783)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110713)
3 . 年次の人間ドックへ(110326)
4 . 2023 年分の確定申告完了!(1つめ)(109875)
5 . 三菱鉛筆がラミーを買収(109783)
cles::blogについて
Referrers