どのように私は、JavaのHashSet <整数>プリミティブint型の配列に変換することができますか?
質問
私はそれでHashSet<Integer>
の束とIntegers
を持っています。私は、配列にそれを回すしたいのですが、呼び出し
hashset.toArray();
Object[]
を返します。手動ですべての要素を反復処理以外のint
の配列にキャストするためのより良い方法はありますか?私は、配列を渡したい。
void doSomething(int[] arr)
私は
のようにそれをキャストしようとした場合でも、オブジェクト[]配列を受け入れないであろうdoSomething((int[]) hashSet.toArray());
解決
Apacheの ArrayUtils には、この(それはまだ繰り返し処理<のhref = "http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/ArrayUtilsを持っています?の.javaビュー=マークアップ#のl2817" relが= "noreferrer">舞台裏の):
doSomething(ArrayUtils.toPrimitive(hashset.toArray()));
彼らは、常にこのようなものかどうかを確認するには良い場所です。
他のヒント
あなたは、Java 8つのストリームを使用して(int[]
含む)Collection<Integer>
からHashSet<Integer>
を作成することができます:
int[] array = coll.stream().mapToInt(Number::intValue).toArray();
ライブラリはまだもちろん、あなたに代わって、コレクション(または他のストリームソース)を反復されます。
簡潔さと外部ライブラリの依存関係を持たないことに加えて、また、あなたがコピーする本当に大きなコレクションを持っている場合は、パラレルを手放すストリームます。
public int[] toInt(Set<Integer> set) {
int[] a = new int[set.size()];
int i = 0;
for (Integer val : set) a[i++] = val;
return a;
}
今、私はそれはもうそのマニュアルではありませんあなたのためのコードを書いたこと、それを何ですか? ;)
あなたは、ApacheのUtilsなくてもSet<Integer>
するInteger[]
を変換することができます:
Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);
しかし、あなたが必要な場合は、セットを反復処理する必要がint[]
ます。
あなただけのグアバのを使用することができます:
Ints.toArray(Collection<? extends Number> collection)
いいえ。あなたはそれらを反復するんです。申し訳ありません。
これを試してみてください。 Javaの8を使用します。
Set<Integer> set = new HashSet<>();
set.add(43);
set.add(423);
set.add(11);
set.add(44);
set.add(56);
set.add(422);
set.add(34);
int[] arr = set.stream().mapToInt(Integer::intValue).toArray();
またのtoArray()メソッドののtoArray(T []の内容)変異体を使用することができます。 HashSetのと同じ大きさのintの空の配列を作成し、その後のtoArray()メソッドに渡す
Integer[] myarray = new Integer[hashset.size()];
doSomething(hashset.toArray(myarray));
あなたは代わりにdoSomething()
のInteger[]
配列を受け入れるようにint[]
機能を変更する必要があると思います。それが不可能な場合は、toArray
にint[]
によって返された値の配列を変換する必要があると思います。