Очистка ArrayList LinkedList обратно в массив - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь удалить элементы ArrayList из LinkedLists обратно в массив. Я попался на исключение элемента, не найденного.

ArrayList<LinkedList<Integer>> stacks = new ArrayList<LinkedList<Integer>>(3);
int[] arr = new arr[5];

stacks.get(0).add(22);
stacks.get(0).add(1);
stacks.get(0).add(7);
stacks.get(1).add(111);
stacks.get(2).add(123);

for (int i = 0; i < arr.length; i++)
{
   while (!stacks.isEmpty())
   {
      arr[i++] = stacks.get(i).remove();
   }
}

Я бы действовал в предположении, что while not empty будет объяснять это. Мне любопытно, почему он не будет успешно копировать содержимое?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Это сделает это. В этом примере используется ArrayLists, но он также будет работать с LinkedLists или всем, что реализует интерфейс List.

Создание списка списков.

        ArrayList<List<Integer>> stacks =
                new ArrayList<>(List.of(List.of(22, 1, 7),
                        List.of(111, 112), List.of(44, 123, 99)));

и преобразование в int array

int[] ints = stacks
        .stream()                   // convert to a stream of lists
        .flatMap(List::stream)      // combine all lists to one list of Integers
        .mapToInt(Integer::intValue)// convert Integers to ints
        .toArray();                 // and output to an array.

System.out.println(Arrays.toString(ints));

Отпечатки

[22, 1, 7, 111, 112, 44, 123, 99]

0 голосов
/ 25 апреля 2020

В вашем коде есть несколько проблем.

int[] arr = new int[5];   // not new arr[]

Вы не добавляете LinkedList к ArrayList. Вам нужно сначала добавить LinkedList s, а затем добавить элементы к stacks.

Ваш l oop совершенно неверен, я переписал его.

ArrayList<LinkedList<Integer>> stacks = new ArrayList<>(3);
int[] arr = new int[5];

stacks.add(new LinkedList<>());
stacks.add(new LinkedList<>());
stacks.add(new LinkedList<>());

stacks.get(0).add(22);
stacks.get(0).add(1);
stacks.get(0).add(7);
stacks.get(1).add(111);
stacks.get(2).add(123);

int count = 0;
for (LinkedList<Integer> stack : stacks) {
    for (Integer integer : stack) {
        arr[count++] = integer;
    }
}

System.out.println(Arrays.toString(arr));
...