Como posso converter um hashset java em uma matriz primitiva int?
Pergunta
tenho uma HashSet<Integer>
com um monte de Integers
iniciar. Eu quero transformá -lo em uma matriz, mas chamando
hashset.toArray();
retorna um Object[]
. Existe uma maneira melhor de lançá -lo para uma variedade de int
Além de iterar todos os elementos manualmente? Eu quero passar a matriz para
void doSomething(int[] arr)
que não aceitará a matriz do objeto [], mesmo que eu tente lançá -la como
doSomething((int[]) hashSet.toArray());
Solução
Apache's Arrayutils tem isso (ainda itera Por trás das cenas):
doSomething(ArrayUtils.toPrimitive(hashset.toArray()));
Eles são sempre um bom lugar para verificar se há coisas assim.
Outras dicas
Você pode criar um int[]
De qualquer Collection<Integer>
(incluindo um HashSet<Integer>
) Usando java 8 fluxos:
int[] array = coll.stream().mapToInt(Number::intValue).toArray();
A biblioteca ainda está iterando a coleção (ou outra fonte de fluxo) em seu nome, é claro.
Além de ser conciso e não ter dependências externas da biblioteca, os fluxos também permitem que você vá paralelo se você tiver uma coleção realmente grande para copiar.
public int[] toInt(Set<Integer> set) {
int[] a = new int[set.size()];
int i = 0;
for (Integer val : set) a[i++] = val;
return a;
}
Agora que escrevi o código para você, não é mais esse manual, é? ;)
Você pode converter um Set<Integer>
para Integer[]
Mesmo sem os utilitários do Apache:
Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);
No entanto, se você precisar int[]
Você tem que iterar sobre o conjunto.
Você pode simplesmente usar a goiaba:
Ints.toArray(Collection<? extends Number> collection)
Não; Você precisa iterar sobre eles. Desculpe.
Tente isso. Usando 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();
Você também pode usar a variante ToArray (t [] conteúdo) do método TOARRAY (). Crie uma variedade vazia de INTs do mesmo tamanho que o hashset e depois passe -o para o método TOARRAY ():
Integer[] myarray = new Integer[hashset.size()];
doSomething(hashset.toArray(myarray));
Você teria que mudar o doSomething()
função para aceitar um Integer[]
matriz em vez de int[]
. Se isso não for viável, você converteria a matriz de valores retornados por toArray
para int[]
.