web-dev-qa-db-fra.com

Comment puis-je convertir un Java HashSet <Integer> en un tableau int primitif?

J'ai un HashSet<Integer> avec un tas de Integers dedans. Je veux le transformer en tableau, mais en appelant

hashset.toArray();

renvoie un Object[]. Existe-t-il un meilleur moyen de le convertir en un tableau de int autre que l'itération manuelle de chaque élément? Je veux passer le tableau à

void doSomething(int[] arr)

qui n'acceptera pas le tableau Object [], même si j'essaye de le lancer comme

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

Apache's ArrayUtils a ceci (il itère toujours dans les coulisses ):

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

Ils sont toujours un bon endroit pour vérifier des choses comme ça.

21
Matthew Flaschen

Vous pouvez créer un int[] de n'importe quel Collection<Integer> (y compris un HashSet<Integer>) en utilisant Java 8 flux:

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

La bibliothèque itère toujours sur la collection (ou une autre source de flux) en votre nom, bien sûr.

En plus d'être concis et de n'avoir aucune dépendance de bibliothèque externe, les flux vous permettent également de faire le parallèle si vous avez une très grande collection à copier.

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;
}

Maintenant que j'ai écrit le code pour vous, ce n'est plus ce manuel, n'est-ce pas? ;)

5
sfussenegger

Vous pouvez convertir un Set<Integer> à Integer[] même sans Apache Utils:

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

Cependant, si vous avez besoin de int[] vous devez itérer sur l'ensemble.

5
Tombart

Vous pouvez simplement utiliser Guava:

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

Nan; vous devez les parcourir. Pardon.

2
Carl Manaster

Essaye ça. Utilisation de 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