どのように私は、JavaのHashSet <整数>プリミティブint型の配列に変換することができますか?

StackOverflow https://stackoverflow.com/questions/2451184

  •  20-09-2019
  •  | 
  •  

質問

私はそれで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[]機能を変更する必要があると思います。それが不可能な場合は、toArrayint[]によって返された値の配列を変換する必要があると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top