Я хочу создать фрагмент кода, который будет принимать список списков, разбивать его на подсписки из 9 и удалять числа из всех списков в каждом из подсписков.Однако, когда мой код запускается, он удаляет числа из всех списков, а не только раздел, взятый из исходного списка
for (int startingIndex = 0; startingIndex <= 8; startingIndex++) {
int initialIndex = startingIndex * 9;
ArrayList<ArrayList<String>> gridRow = new ArrayList<ArrayList<String>>();
gridRow.addAll((posabilityGrid.subList(initialIndex, initialIndex+9)));
System.out.println("gridrow - " + gridRow);
ArrayList<String> numbers = new ArrayList<String>();
for (ArrayList<String> posability : gridRow) {
if (posability.size() == 1) {
numbers.add(posability.get(0));
}
}
System.out.println("numbers - " + numbers);
for (ArrayList<String> posability : gridRow) {
posability.removeAll(numbers);
}
System.out.println("newgrid - " + gridRow);
edit: Когда начальный индекс сначала равен 0:
строка сетки - [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [4], [3], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [2], [1,2, 3, 4, 5, 6, 7, 8, 9], [9]]
чисел - [4, 3, 2, 9]
тогда правильнораспечатывает:
newgrid - [[1, 5, 6, 7, 8], [1, 5, 6, 7, 8], [], [], [1, 5,6, 7, 8], [1, 5, 6, 7, 8], [], [1, 5, 6, 7, 8], []]
Однако при запускеиндекс равен 1 в начале:
gridrow - [[1, 5, 6, 7, 8], [1, 5, 6, 7, 8], [5], [1,5, 6, 7, 8], [1, 5, 6, 7, 8], [9], [1, 5, 6, 7, 8], [1, 5, 6, 7, 8], [1]]
вместо ожидаемых
[[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [5], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1]]
В этом разделе списка по какой-то причине были удалены предыдущие номера, когда он должен оставаться прежним, поэтому вычитается только новый набор чисел
2-е редактирование: я добавил строку
numbers.clear();
но у меня все та же проблема.Я распечатал список номеров и проверил, что он очищается каждый раз, но кажется, что главный список изменяется при первом «posability.removeAll (numbers);»
Edit 3: я решил этоТеперь проблема была с ArrayList и Sublists.Как только я изменил список, чтобы создать новую глубокую копию ArrayList, а не просто ссылаться на старую, код прекрасно работает.
List<List<String>> posabilityGridClone = posabilityGrid.stream().map(it -> new ArrayList(it)).collect(Collectors.toList());
gridRow.addAll((Collection<? extends ArrayList<String>>) (posabilityGridClone.subList(initialIndex, initialIndex+9)));