This sadly doesn't work:
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Is there a nicer way except adding them manually?
This sadly doesn't work:
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Is there a nicer way except adding them manually?
Using ArrayUtils
from apache commons-lang
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
You can avoid the copy by implementing an AbstractList
via a static factory. All changes to the list write through to the array and vice-versa.
Create this method somewhere.
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;}
};
}
Then just invoke this method to create the array. You will need to use the interface List
and not the implementation ArrayList
in your declaration.
long[] longs = new long[]{1L, 2L, 3L};
List<Long> longArray = asList(longs);
I picked up this technique from the language guide.
Bozho's answer is good, but I dislike copying the array twice. I ended up rolling my own utility method for this:
public static ArrayList<Long> convertArray(long[] array) {
ArrayList<Long> result = new ArrayList<Long>(array.length);
for (long item : array)
result.add(item);
return result;
}
Since others have suggested external libraries, here's the Google Guava libraries way:
long[] longs = {1L, 2L, 3L};
List<Long> longList = com.google.common.primitives.Longs.asList(longs);
Note use of java.lang.Long
, not long
final Long[] longs = new Long[]{1L};
final List<Long> longArray = Arrays.asList(longs);
Doesn't add any thirdparty dependencies.