Integers
がたくさん入ったHashSet<Integer>
があります。私はそれを配列に変えたいが、呼び出す
hashset.toArray();
Object[]
を返します。すべての要素を手動で反復処理する以外に、int
の配列にキャストするより良い方法はありますか?配列を渡したい
void doSomething(int[] arr)
object []配列を受け入れません。次のようにキャストしようとしても
doSomething((int[]) hashSet.toArray());
Apacheの ArrayUtils にはこれがあります(それでも 舞台裏 を繰り返します):
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;
}
私があなたのためにコードを書いた今、それはもうそのマニュアルではありませんか? ;)
Set<Integer>
からInteger[]
Apache Utilsなしでも:
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();