java.lang.UnsupportedOperationException: null - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь удалить пустую ячейку в apache-poi. Я получаю эту ошибку в unmarkedColumns.remove (unmarkedColumns.get (i)): есть проблема с методом удаления. Я не понимаю почему. Можете ли вы мне помочь?

java.lang.UnsupportedOperationException: null
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
)    
 Integer[] integers = new Integer[headers.size()];
    Arrays.fill(integers, 0);
    List<Integer> unmarkedColumns = Arrays.asList(integers);
    for (ScoredFormData scoredFormData : scoredFormDatas) {
        Row dataRow = sheet.createRow(++rownum);
        List<Object> rowValues = prepareExportRow(scoredFormData, visitManager, parameters, 
     dynamicDatamanager,
                scoreCriteriaDefinitions);
        for (int i = 0; i < rowValues.size(); i++) {
            if (unmarkedColumns.get(i) != 1 && rowValues.get(i) != null
                    && !rowValues.get(i).equals("")) {
                unmarkedColumns.set(i, 1); 
            }
        }
        populateCells(rowValues, dataRow);
    }

    for (int i = 0; i < unmarkedColumns.size(); i++) {
        if (unmarkedColumns.get(i) == 0) {
            Iterator<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                Boolean changed = false;
                for (int j = i + 1; j < row.getLastCellNum() + 1; j++) {
                    Cell oldCell = row.getCell(j - 1);
                    if (oldCell != null) {
                        row.removeCell(oldCell);
                        changed = true;
                        Cell nextCell = row.getCell(j);
                        if (nextCell != null) {
                            Cell newCell = row.createCell(j - 1, nextCell.getCellType());
                            switch (newCell.getCellType()) {
                            case Cell.CELL_TYPE_BOOLEAN: {
                                newCell.setCellValue(nextCell.getBooleanCellValue());
                                break;}}}}


                if (changed ) {
                    unmarkedColumns.remove(unmarkedColumns.get(i));
                    i = 0;
                }
            }

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

Arrays.asList(..) возвращает список с фиксированным размером, поэтому вы не можете расширить или уменьшить его.

Чтобы исправить это, вы можете обернуть его в ArrayList:

List<Integer> unmarkedColumns = new ArrayList<>(Arrays.asList(integers));

1 голос
/ 08 октября 2019

Ваша проблема здесь

List<Integer> unmarkedColumns = Arrays.asList(integers);

Если вы используете Arrays.asList (...), он возвращает список фиксированного размера, поэтому вы не можете удалить из него элементы.

Выможно обойти это, обернув его:

List<Integer> list = new ArrayList<Integer>(Arrays.asList(integers));
...