Преобразование массива долго к ArrayList <Долго>

Это печально не работает:

long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);

Существует ли более хороший путь кроме добавления их вручную?

24
задан ripper234 30 December 2009 в 11:44
поделиться

6 ответов

Используя ArrayUtils из apache commons-lang

long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
43
ответ дан 28 November 2019 в 22:27
поделиться

Так как другие предлагали внешние библиотеки, вот Google Guava библиотеки способ:

long[] longs = {1L, 2L, 3L};
List<Long> longList = com.google.common.primitives.Longs.asList(longs);

Соответствующий javadoc для Longs.

.
12
ответ дан 28 November 2019 в 22:27
поделиться

Вы можете избежать копирования, реализовав Абстрактный список через статическую фабрику. Все изменения списка записываются в массив и наоборот.

Создайте этот метод где-нибудь.

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);

Я взял этот метод из руководства по языку .

.
9
ответ дан 28 November 2019 в 22:27
поделиться

Обратите внимание на использование java.lang.long, а не long

final Long[] longs = new Long[]{1L};
final List<Long> longArray = Arrays.asList(longs);

Не добавляет никаких зависимостей от третьих лиц.

.
5
ответ дан 28 November 2019 в 22:27
поделиться

Ответ Божо хороший, но мне не нравится копировать массив дважды. В итоге я закатил свой собственный метод утилиты:

public static ArrayList<Long> convertArray(long[] array) {
  ArrayList<Long> result = new ArrayList<Long>(array.length);
  for (long item : array)
    result.add(item);
  return result;
}
2
ответ дан 28 November 2019 в 22:27
поделиться

используя Доллар можно сделать это преобразование всего в 1 строке кода:

long[] longs = new long[]{1L};
List<Long> longList = $(longs).toList();

можно также легко их упаковать:

Long[] arrayOfLongs = $(longs).toArray();
0
ответ дан 28 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: