Это, к сожалению, не работает:
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Есть ли лучший способ, кроме добавления их вручную?
Это, к сожалению, не работает:
long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Есть ли лучший способ, кроме добавления их вручную?
Используя ArrayUtils от apache commons-lang
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
Вы можете избежать копирования, выполнив AbstractList
через статический factory. Все изменения в списке записываются в массив и наоборот.
Создайте этот метод где-нибудь.
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;}
};
}
Затем просто вызовите этот метод для создания массива. Вам нужно будет использовать интерфейс List
, а не реализацию ArrayList
в вашей декларации.
long[] longs = new long[]{1L, 2L, 3L};
List<Long> longArray = asList(longs);
Я взял эту технику из руководства .
Так как другие предложили внешние библиотеки, здесь Google Guava libraries:
long[] longs = {1L, 2L, 3L};
List<Long> longList = com.google.common.primitives.Longs.asList(longs);
Обратите внимание на использование java.lang.Long
, а не long
final Long[] longs = new Long[]{1L};
final List<Long> longArray = Arrays.asList(longs);
Не добавляет зависимостей третьих сторон.
Ответ на Божо хороший, но мне не нравится копировать массив дважды. Я закончил свой собственный метод утилиты для этого:
public static ArrayList<Long> convertArray(long[] array) {
ArrayList<Long> result = new ArrayList<Long>(array.length);
for (long item : array)
result.add(item);
return result;
}
используя Dollar, вы можете сделать это преобразование только в одной строке кода:
long[] longs = new long[]{1L};
List<Long> longList = $(longs).toList();
вы также можете легко их добавить:
Long[] arrayOfLongs = $(longs).toArray();
В JDK 1.8, с Lambda и Stream API, мы можем сделать это следующим образом:
long[] longArr = {3L, 4L, 5L, 6L, 7L};
List<Long> longBoxArr = Arrays.stream(longArr).boxed().collect(Collectors.toList());