197 votes

Comment convertir int[] en Integer[] en Java ?

Je suis nouveau dans le domaine de Java et je suis très confus.

J'ai un grand ensemble de données de longueur 4 int[] et je veux compter le nombre de fois que chaque combinaison particulière de 4 entiers se produit. C'est très similaire au comptage de la fréquence des mots dans un document.

Je veux créer un Map<int[], double> qui fait correspondre chaque int[] à un compte courant au fur et à mesure que la liste est itérée, mais Map ne prend pas les types primitifs.

Alors j'ai fait Map<Integer[], Double> .

Mes données sont stockées en tant que ArrayList<int[]> donc ma boucle devrait être quelque chose comme :

ArrayList<int[]> data = ... // load a dataset`

Map<Integer[], Double> frequencies = new HashMap<Integer[], Double>();

for(int[] q : data) {

    // **DO SOMETHING TO convert q from int[] to Integer[] so I can put it in the map

    if(frequencies.containsKey(q)) {
    frequencies.put(q, tfs.get(q) + p);
    } else {
        frequencies.put(q, p);
    }
}

Je ne suis pas sûr du code dont j'ai besoin dans le commentaire pour que cela fonctionne afin de convertir un fichier de type int[] à un Integer[] . Ou peut-être suis-je fondamentalement confus quant à la bonne façon de procéder.

241voto

Sheepy Points 1538

Native Java 8 (une ligne)

Avec Java 8, int[] peut être converti en Integer[] facilement :

int[] data = {1,2,3,4,5,6,7,8,9,10};

// To boxed array
Integer[] what = Arrays.stream( data ).boxed().toArray( Integer[]::new );
Integer[] ever = IntStream.of( data ).boxed().toArray( Integer[]::new );

// To boxed list
List<Integer> you  = Arrays.stream( data ).boxed().collect( Collectors.toList() );
List<Integer> like = IntStream.of( data ).boxed().collect( Collectors.toList() );

Comme d'autres l'ont dit, Integer[] n'est généralement pas une bonne clé de carte. Mais en ce qui concerne la conversion, nous avons maintenant un code relativement propre et natif.

82voto

Eddie Points 27755

Si vous voulez convertir un int[] à un Integer[] il n'y a pas de moyen automatisé de le faire dans le JDK. Cependant, vous pouvez faire quelque chose comme ceci :

int[] oldArray;

... // Here you would assign and fill oldArray

Integer[] newArray = new Integer[oldArray.length];
int i = 0;
for (int value : oldArray) {
    newArray[i++] = Integer.valueOf(value);
}

Si vous avez accès à la Apache lang vous pouvez alors utiliser la bibliothèque ArrayUtils.toObject(int[]) méthode comme ceci :

Integer[] newArray = ArrayUtils.toObject(oldArray);

14voto

zemiak Points 92

Convertit int[] en Integer[] :

    import java.util.Arrays;
    ...

    int[] aint = {1,2,3,4,5,6,7,8,9,10};
    Integer[] aInt = new Integer[aint.length];

    Arrays.setAll(aInt, i -> aint[i]);

10voto

ohtph Points 99

Utilisation d'un for-loop régulier sans bibliothèques externes :

Convertit int[] en Integer[] :

int[] primitiveArray = {1, 2, 3, 4, 5};
Integer[] objectArray = new Integer[primitiveArray.length];

for(int ctr = 0; ctr < primitiveArray.length; ctr++) {
    objectArray[ctr] = Integer.valueOf(primitiveArray[ctr]); // returns Integer value
}

Convertit Integer[] en int[] :

Integer[] objectArray = {1, 2, 3, 4, 5};
int[] primitiveArray = new int[objectArray.length];

for(int ctr = 0; ctr < objectArray.length; ctr++) {
    primitiveArray[ctr] = objectArray[ctr].intValue(); // returns int value
}

8voto

On peut supposer que vous voulez que la clé de la carte corresponde à la valeur des éléments plutôt qu'à l'identité du tableau. Dans ce cas, vous voulez une sorte d'objet qui définisse equals y hashCode comme on peut s'y attendre. Le plus simple est de convertir en List<Integer> soit un ArrayList ou mieux utiliser Arrays.asList . Mieux que cela, vous pouvez introduire une classe qui représente les données (similaire à java.awt.Rectangle mais je recommande de rendre les variables private final, et la classe final aussi).

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