767 votes

Comment convertir List<Integer> en int[] en Java ?

Cette question est similaire à la précédente : http://stackoverflow.com/questions/880581/java-convert-int-to-integer

Je suis nouveau en Java. Comment puis-je convertir une liste en int[] en Java ? Je suis confus car List.toArray() renvoie en fait un Object[], qui peut être converti en Integer[] ou int[].

Pour l'instant, j'utilise une boucle pour le faire :

int[] toIntArray(List<Integer> list){
  int[] ret = new int[list.size()];
  for(int i = 0;i < ret.length;i++)
    ret[i] = list.get(i);
  return ret;
}

Je suis sûr qu'il y a un meilleur moyen de faire ça.

8voto

Loduwijk Points 512

Je vais en ajouter un autre. J'ai remarqué plusieurs utilisations de boucles for, mais vous n'avez même pas besoin de quelque chose à l'intérieur de la boucle. Je ne le mentionne que parce que la question initiale visait à trouver un code moins verbeux.

int[] toArray(List<Integer> list) {
    int[] ret = new int[list.size()];
    int i = 0;
    for(Iterator<Integer> it = list.iterator(); it.hasNext(); ret[i++] = it.next());
    return ret;
}

Si Java autorisait les déclarations multiples dans une boucle for comme le fait C++, nous pourrions aller un peu plus loin et faire for(int i = 0, Iterator it...

En fin de compte (cette partie n'est que mon opinion), si vous avez l'intention d'avoir une fonction ou une méthode d'aide pour faire quelque chose pour vous, il suffit de la mettre en place et de l'oublier. Il peut s'agir d'une seule ligne ou de dix ; si vous ne la regardez plus jamais, vous ne verrez pas la différence.

5voto

neesh Points 2092

Il n'y a pas vraiment de moyen de "mettre en évidence" ce que vous essayez de faire parce que toArray renvoie un Object[] et qu'il n'est pas possible de convertir un Object[] en int[] ou un Integer[] en int[].

4voto

gerardw Points 330
int[] ret = new int[list.size()];       
Iterator<Integer> iter = list.iterator();
for (int i=0; iter.hasNext(); i++) {       
    ret[i] = iter.next();                
}                                        
return ret;

3voto

dfa Points 54490

Essayez aussi Dollar ( vérifier cette révision ) :

import static com.humaorie.dollar.Dollar.*
...

List<Integer> source = ...;
int[] ints = $(source).convert().toIntArray();

2voto

DennisTemper Points 51

Je vous recommande d'utiliser List<?> Une implémentation squelettique de l'API des collections de Java, qui semble être très utile dans ce cas particulier :

package mypackage;

import java.util.AbstractList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Test {

//Helper method to convert int arrays into Lists
static List<Integer> intArrayAsList(final int[] a) {
    if(a == null)
        throw new NullPointerException();
    return new AbstractList<Integer>() {

        @Override
        public Integer get(int i) {
            return a[i];//autoboxing
        }
        @Override
        public Integer set(int i, Integer val) {
            final int old = a[i];
            a[i] = val;//auto-unboxing
            return old;//autoboxing
        }
        @Override
        public int size() {
            return a.length;
        }
    };
}

public static void main(final String[] args) {
    int[] a = {1, 2, 3, 4, 5};
    Collections.reverse(intArrayAsList(a));
    System.out.println(Arrays.toString(a));
}
}

Attention aux inconvénients du boxing/unboxing

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X