Cela ne fonctionne pas malheureusement:Conversion d'un tableau de temps à Arraylist <Long>
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
est-il un moyen plus agréable, sauf les ajouter manuellement?
Cela ne fonctionne pas malheureusement:Conversion d'un tableau de temps à Arraylist <Long>
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
est-il un moyen plus agréable, sauf les ajouter manuellement?
En utilisant ArrayUtils de apache commons-lang
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
+1 Battez-moi, dammit, il m'a fallu trop longtemps pour faire défiler le javadoc 'ArrayUtils' :) – skaffman
:) Je l'ai ouvert dans mon éclipse (en utilisant un décompilateur) – Bozho
Ce n'est pas très important, mais je n'aime pas copier le tableau deux fois. J'ai fini par lancer une fonction d'utilité pour le faire directement. – ripper234
Vous pouvez éviter la copie en mettant en place une AbstractList
via une usine statique. Toutes les modifications apportées à la liste sont écrites dans le tableau et vice-versa.
Créez cette méthode quelque part.
public static List<Long> asList(final long[] l) {
return new AbstractList<Long>() {
public Long get(int i) {return l[i];}
// throws NPE if val == null
public Long set(int i, Long val) {
Long oldVal = l[i];
l[i] = val;
return oldVal;
}
public int size() { return l.length;}
};
}
Puis appelez simplement cette méthode pour créer le tableau. Vous devrez utiliser l'interface List
et non l'implémentation ArrayList
dans votre déclaration.
long[] longs = new long[]{1L, 2L, 3L};
List<Long> longArray = asList(longs);
Je pris cette technique du language guide.
La réponse de Bozho est bonne, mais je n'aime pas copier le tableau deux fois. J'ai fini par rouler ma propre méthode utilitaire pour cela:
public static ArrayList<Long> convertArray(long[] array) {
ArrayList<Long> result = new ArrayList<Long>(array.length);
for (long item : array)
result.add(item);
return result;
}
Notez que dans la réponse de bozho, le tableau n'est pas copié deux fois, mais seulement une fois: Arrays.asList ne renvoie pas de copie, mais renvoie un wrapper autour du tableau (l'encapsuleur implémente l'interface List). La première copie est nécessaire car Arrays.asList ne fonctionne pas avec les types primitifs, d'où la première conversion de primitive (long) en type d'objet (Long). Voir la réponse de Wayne Young pour la solution d'encapsuleur direct (pas de copie du tout). – barjak
Comme d'autres l'ont suggéré des bibliothèques externes, voici la façon Google Guava libraries:
long[] longs = {1L, 2L, 3L};
List<Long> longList = com.google.common.primitives.Longs.asList(longs);
utilisation Note de java.lang.Long
, non long
final Long[] longs = new Long[]{1L};
final List<Long> longArray = Arrays.asList(longs);
n'ajoute toutes les dépendances thirdparty.
Si vous pouvez changer le problème, vous pouvez directement utiliser Arrays.asList() et n'avez pas besoin de cette construction ArrayList supplémentaire. –
Sûrement nous voulons tous changer le problème à quelque chose de plus facile à résoudre? J'ai donc édité mon post pour reféter la solution nettoyante de Wayne. Doit se rappeler de lire par ses propres messages d'abord. –
utilisant Dollar vous pouvez faire cette conversion en seulement 1 ligne de code:
long[] longs = new long[]{1L};
List<Long> longList = $(longs).toList();
vous pouvez aussi les boîte facilement:
Long[] arrayOfLongs = $(longs).toArray();
En JDK 1.8, avec Lambda et API Stream, nous peut le faire comme ceci:
long[] longArr = {3L, 4L, 5L, 6L, 7L};
List<Long> longBoxArr = Arrays.stream(longArr).boxed().collect(Collectors.toList());
En relation (proche) avec http://stackoverflow.com/questions/754294/convert-an-array-of-primit ive-longs-dans-une-liste-de-longs/1974363 # 1974363 –