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

Список <String> в проблему преобразования ArrayList <String>

У меня есть следующий метод... который фактически принимает список предложений и разбивает каждое предложение на слова. Вот он:

public List<String> getWords(List<String> strSentences){
allWords = new ArrayList<String>();
    Iterator<String> itrTemp = strSentences.iterator();
    while(itrTemp.hasNext()){
        String strTemp = itrTemp.next();
        allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));          
    }
    return allWords;
}

Мне нужно передать этот список в хэш-карту в следующем формате

HashMap<String, ArrayList<String>>

поэтому этот метод возвращает List и мне нужен массивList? Если я попытаюсь бросить его, это не тренировка... никаких предложений?

Кроме того, если я изменил ArrayList на List в HashMap, я получаю

java.lang.UnsupportedOperationException

из-за этой строки в моем коде

sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());

Любые лучшие предложения?

4b9b3361

Ответ 1

Прежде всего, почему карта a HashMap<String, ArrayList<String>>, а не HashMap<String, List<String>>? Есть ли какая-то причина, по которой значение должно быть конкретной реализацией интерфейса List (ArrayList в этом случае)?

Arrays.asList не возвращает java.util.ArrayList, поэтому вы не можете назначить возвращаемое значение Arrays.asList переменной типа ArrayList.

Вместо:

allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));

Попробуйте следующее:

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));

Ответ 2

Cast работает, где фактический экземпляр списка - ArrayList. Если это, скажем, a Vector (что является еще одним расширением List), оно выдает исключение ClassCastException.

Ошибка при изменении определения вашего HashMap связана с обработкой элементов, которые обрабатываются, и этот процесс ожидает метод, который определяется только в ArrayList. Исключение говорит вам, что он не нашел метод, который он искал.

Создайте новый ArrayList с содержимым старого.

new ArrayList<String>(myList);

Ответ 3

Посмотрите ArrayList # addAll (Collection)

Добавляет все элементы указанной коллекции в конец этот список, в том порядке, в котором они возвращаются указанным коллекция Итератор. Поведение этой операции undefined, если указанная коллекция изменяется во время работы прогресс. (Это означает, что поведение этого вызова undefined, если указанная коллекция - это список, и этот список не пуст.)

Итак, вы можете использовать

ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);

Ответ 4

Arrays.asList не возвращает экземпляр java.util.ArrayList но возвращает экземпляр java.util.Arrays.ArrayList.

Вам нужно будет преобразовать в ArrayList, если вы хотите получить доступ к конкретной информации ArrayList

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));

Ответ 5

В Kotlin List можно преобразовать в ArrayList, передав его в качестве параметра конструктора.

ArrayList(list)