web-dev-qa-db-ja.com

Java HashSet <Integer>をプリミティブint配列に変換するにはどうすればよいですか?

Integersがたくさん入ったHashSet<Integer>があります。私はそれを配列に変えたいが、呼び出す

hashset.toArray();

Object[]を返します。すべての要素を手動で反復処理する以外に、intの配列にキャストするより良い方法はありますか?配列を渡したい

void doSomething(int[] arr)

object []配列を受け入れません。次のようにキャストしようとしても

doSomething((int[]) hashSet.toArray());
28
jackbot

Apacheの ArrayUtils にはこれがあります(それでも 舞台裏 を繰り返します):

doSomething(ArrayUtils.toPrimitive(hashset.toArray()));

これらは常にこのようなことをチェックするのに適した場所です。

21

Java 8ストリーム)を使用して、int[]Collection<Integer>を含む)からHashSet<Integer>を作成できます。

int[] array = coll.stream().mapToInt(Number::intValue).toArray();

もちろん、ライブラリはあなたに代わってコレクション(またはその他のストリームソース)を繰り返し処理します。

ストリームは、簡潔で外部ライブラリの依存関係がないことに加えて、本当に大きなコレクションをコピーする場合に並行して実行できます。

18
Jeffrey Bosboom
public int[] toInt(Set<Integer> set) {
  int[] a = new int[set.size()];
  int i = 0;
  for (Integer val : set) a[i++] = val;
  return a;
}

私があなたのためにコードを書いた今、それはもうそのマニュアルではありませんか? ;)

5
sfussenegger

Set<Integer>からInteger[] Apache Utilsなしでも:

Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);

ただし、int[]セットを反復処理する必要があります。

5
Tombart

あなたはただグアバのものを使うことができます:

Ints.toArray(Collection<? extends Number> collection)
4
Ralph Mueller

いや;それらを反復処理する必要があります。ごめんなさい。

2
Carl Manaster

これを試して。 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();
1
sameer