知っていると便利な章
4.11. コレクションと配列のやりとり
『目的』
コレクションと配列間のやりとりを簡潔に行いましょう。
『Before』
配列をCollectionに変換します。
リストを生成して、配列の要素をリストに繰り返し詰めます。
String[] strings = new String[100]; /* 配列 -> Collection */ List<String> list = new ArrayList<>(); for (int i = 0; i < strings.length; i++) { list.add(strings[i]); }
もっと簡単な方法があります。
Collectionを配列に変換します。
配列を生成して、リストの要素を配列に繰り返し詰めます。
Collection<String> values = new ArrayList<>(); values.add("1"); values.add("2"); int n = values.size(); /* Collection -> 配列 */ String[] strings = new String[n]; for (int i = 0; i < strings.length; i++) { strings[i] = values.get(i); }
これも、もっと簡単な方法があります。
『After』
配列をCollectionに変換します。
String[] strings = new String[100]; /* 配列 -> Collection */ List<String> list = Arrays.asList(strings);
forループは必要ありません。また、リストへの変更はそのまま配列に反映されます。
Collectionを配列に変換します。
Collection<String> values = new ArrayList<>(); values.add("1"); values.add("2"); /* Collection -> 配列 */ String[] strings = (String[]) values.toArray(new String[values.size()]);
forループは必要ありません。
上記の例は配列の要素がString、つまりオブジェクト型の場合でした。
配列の要素がint,longといったプリミティブ型の場合は残念ながら、Arrays.asListとCollection.toArrayでは対応できません。 配列の要素がプリミティブ型の場合は以下のようなメソッドを用意することによってArrays.asListとCollection.toArrayに相当する機能を実現することができます。
※ただし、各プリミティブ型用のメソッドを用意する必要があります。
// int配列をList<Integer>に変換する。 List<Integer> asList(final int ... a) { return new AbstractList<Integer>() { @Override public Integer get(int index) { return a[index]; } @Override public Integer set(int index, Integer element) { int before = a[index]; a[index] = element; return before; } @Override public int size() { return a.length; } }; } // List<Integer>をint配列に変換する。 int[] toIntArray(List<Integer> list) { int[] arr = new int[list.size()]; int i = 0; for (int n : list) { arr[i++] = n; } return arr; }
『まとめ』
Arrays.asListとCollection.toArrayの組み合わせが 配列ベースのAPIとコレクションベースのAPIの橋渡しをします。 ArraysやCollectionには便利なメソッドが色々用意されているので積極的に使いましょう。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針