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());
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.
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.
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? ;)
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.
Vous pouvez simplement utiliser Guava:
Ints.toArray(Collection<? extends Number> collection)
Nan; vous devez les parcourir. Pardon.
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();