Перенос элементов из одного списка в другой с использованием цикла for в Java - PullRequest
0 голосов
/ 19 февраля 2019

Попытка перенести элементы одного списка строк во временный список с помощью цикла for.

List<String> origin = Arrays.asList("foo", "bar", "var");
        List<String> temp = Arrays.asList();

        String a = null;

        for(int i = 0; i < origin.size(); i++) {
            //Want to format before adding to temp list
            a = doSomeFormatting(origin.get(i));
            temp.add(a);
        }

Постоянно получаю сообщение об ошибке: Исключение в потоке

"main" java.lang.UnsupportedOperationException
    at java.base/java.util.AbstractList.add(AbstractList.java:153)
    at java.base/java.util.AbstractList.add(AbstractList.java:111)
    at test/test.Test.main(Test.java:13)

Если это не такМожно ли это сделать, если в каком-то случае я хочу выполнить некоторое форматирование строк в списках и перенести во временный список?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Arrays.asList возвращает вам неизменный список, следовательно, UnsupportedOperationException при добавлении. Вот javadoc и вот что он говорит:

Возвращает список фиксированного размера , поддерживаемый указанным массивом.(Изменения в возвращаемом списке «сквозная запись» в массив.) Этот метод действует как мост между API на основе массива и на основе коллекции в сочетании с Collection.toArray ().Возвращенный список является сериализуемым и реализует RandomAccess.

Для вашего случая вы можете фактически сделать это без какого-либо цикла со следующей строкой (то есть с помощью конструктора):

List<String> temp = new ArrayList(origin);

Обновление

Если вы хотите отформатировать, вы можете повторить и применить формат, например:

List<String> temp = new ArrayList<>();
for(String element : origin) {
    String formattedElement = format(element);
    temp.add(formattedElement);
}

Вот способ Java 8:

List<String> temp = origin.stream()
    .map(e -> format(e))
    .collect(Collectors.toList());
0 голосов
/ 19 февраля 2019

Arrays.asList() возвращает неизменный список.Вместо этого вы должны использовать некоторую реализацию изменяемого списка, такую ​​как ArrayList:

List<String> temp = new ArrayList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...