40

HashSet<Integer>たくさん入っIntegersています。配列に変換したいのですが、

hashset.toArray();

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

void doSomething(int[] arr)

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

doSomething((int[]) hashSet.toArray());
4

8 に答える 8

34

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

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

もちろん、ライブラリは引き続きコレクション (または他のストリーム ソース) を反復処理しています。

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

于 2016-03-20T02:23:38.733 に答える
22

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

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

このようなことを確認するには、常に良い場所です。

于 2010-03-15T23:36:25.253 に答える
7

Apache Utils がなくてもaSet<Integer>を に変換できます。Integer[]

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

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

于 2013-02-25T14:12:23.450 に答える
6
public int[] toInt(Set<Integer> set) {
  int[] a = new int[set.size()];
  int i = 0;
  for (Integer val : set) a[i++] = val;
  return a;
}

あなたのためにコードを書いたので、もはやそのマニュアルではありませんよね?;)

于 2010-03-15T23:33:58.553 に答える
4

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

Ints.toArray(Collection<? extends Number> collection)
于 2014-04-11T21:28:36.040 に答える
2

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

于 2010-03-15T23:29:40.650 に答える
-4

toArray() メソッドの toArray(T[] contents) バリアントを使用することもできます。HashSet と同じサイズの int の空の配列を作成し、それを toArray() メソッドに渡します。

Integer[] myarray = new Integer[hashset.size()];
doSomething(hashset.toArray(myarray));

の代わりに配列doSomething()を受け入れるように関数を変更する必要があります。それが不可能な場合は、 によって返される値の配列を に変換する必要があります。Integer[]int[]toArrayint[]

于 2012-04-17T21:54:20.037 に答える