Frage

Ich habe ein HashSet<Integer> mit einem Bündel von Integers in ihm. Ich möchte es in ein Array drehen, aber Aufruf

hashset.toArray();

gibt einen Object[]. Gibt es einen besseren Weg, es zu einer Reihe von int andere als Iterieren durch jedes Element manuell zu werfen? Ich möchte das Array zu übergeben

void doSomething(int[] arr)

, die das Object [] Array nicht akzeptieren, auch wenn ich es wie

versuchen Casting
doSomething((int[]) hashSet.toArray());
War es hilfreich?

Lösung

Apache ArrayUtils hat dies (noch Iterierten hinter den Kulissen ):

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

Sie sind immer ein guter Ort für Dinge wie diese zu überprüfen.

Andere Tipps

Sie können eine int[] von jedem Collection<Integer> erstellen (einschließlich einem HashSet<Integer>) unter Verwendung von Java 8 Streams:

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

Die Bibliothek noch über die Sammlung iterieren (oder eine andere Stromquelle) in Ihrem Namen, natürlich.

Neben prägnanten sein und keine externe Bibliothek Abhängigkeiten aufweisen, strömt auch Sie gehen parallel, wenn Sie eine wirklich große Sammlung haben zu kopieren.

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

Nun, da ich den Code für Sie geschrieben haben, es ist nicht, dass die manuelle mehr, oder? ;)

Sie können eine Set<Integer> zu Integer[] konvertieren auch ohne Apache Utils:

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

Wenn Sie jedoch int[] müssen Sie müssen Iterierte über den Satz.

Sie können mit nur Guava ist:

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

Nein; Sie haben über sie zu Iterierte bekommen. Es tut uns Leid.

Versuchen Sie dies. Mit 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();

Sie können auch die toArray (T [] Inhalt) Variante der toArray () Methode verwenden. Erstellen einer leeren Palette von ints der gleichen Größe wie die HashSet, und dann übergeben an die toArray () Methode:

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

würden Sie haben die doSomething() Funktion zu ändern, um eine Integer[] Array statt int[] zu akzeptieren. Wenn das nicht möglich ist, dann würden Sie das Array von Werten von toArray zu int[] zurückgegeben haben konvertieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top