Подтвердить что ты не робот

Создать измененный список из массива?

У меня есть массив, который я бы хотел превратить в List, чтобы изменить содержимое массива.

У есть много вопросов/ответов, которые адресуют Arrays.asList() и как он предоставляет только представление List для базового массива и как попытка манипулировать результирующим списком обычно бросает UnsupportedOperationException как методы, используемые для управления (например, add(), remove() и т.д.) не реализованы реализацией List, предоставленной Arrays.asList().

Но я не могу найти пример того, как превратить массив в изменяемый список. Я полагаю, что я могу пройти через массив и put() каждое значение в новый список, но мне интересно, существует ли там интерфейс, чтобы сделать это для меня.

4b9b3361

Ответ 1

Один простой способ:

Foo[] array = ...;
List<Foo> list = new ArrayList<Foo>(Arrays.asList(array));

Это создаст измененный список - но это будет копия исходного массива. Изменение списка не изменит массив. Вы можете скопировать его позже, конечно, используя toArray.

Если вы хотите создать изменяемое представление в массиве, я считаю, что вам придется реализовать это самостоятельно.

Ответ 2

И если вы используете API-интерфейс API google

Lists.newArrayList(myArray)

Ответ 3

Если вы используете Коллекции Eclipse (ранее Коллекции GS), вы можете использовать FastList.newListWith(...) или FastList.wrapCopy(...).

Оба метода принимают varargs, поэтому вы можете создать массив inline или передать существующий массив.

MutableList<Integer> list1 = FastList.newListWith(1, 2, 3, 4);

Integer[] array2 = {1, 2, 3, 4};
MutableList<Integer> list2 = FastList.newListWith(array2);

Разница между двумя методами заключается в том, копируется ли массив. newListWith() не копирует массив и, следовательно, занимает постоянное время. Вы должны избегать использования его, если знаете, что массив может быть изменен в другом месте.

Integer[] array2 = {1, 2, 3, 4};
MutableList<Integer> list2 = FastList.newListWith(array2);
array2[1] = 5;
Assert.assertEquals(FastList.newListWith(1, 5, 3, 4), list2);

Integer[] array3 = {1, 2, 3, 4};
MutableList<Integer> list3 = FastList.wrapCopy(array3);
array3[1] = 5;
Assert.assertEquals(FastList.newListWith(1, 2, 3, 4), list3);

Примечание: Я являюсь коммиттером для коллекций Eclipse.

Ответ 4

myNewArrayList = new ArrayList(
    Arrays.asList(
      (Object[])myArray)));

Ответ 5

Этот простой код с использованием Stream API, включенного в Java 8, создает изменяемый список (или представление), содержащий элементы вашего массива:

Foo[] array = ...;
List<Foo> list = Stream.of(array).collect(Collectors.toCollection(ArrayList::new));

Или, что равнозначно:

List<Foo> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));