У меня есть следующий метод ... который фактически берет список предложений и разбивает каждое предложение на слова. Вот:
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>>
поэтому этот метод возвращает список, и мне нужен arrayList? Если я попробую применить, ничего не получится ... есть предложения?
Кроме того, если я изменю ArrayList на List в HashMap, я получу
java.lang.UnsupportedOperationException
из-за этой строки в моем коде
sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());
Есть предложения лучше?
UnsupportedOperationException
это вызвано тем, чтоArrays.asList
метод возвращает список фиксированного размера, поддерживаемый массивом - его нельзя изменить. Решение, представленное здесь @Jesper, позволит избежать этого.Cast работает там, где фактическим экземпляром списка является файл
ArrayList
. Если это, скажем, aVector
(что является еще одним его расширениемList
), он выдаст исключение ClassCastException.Ошибка при изменении определения вашего HashMap связана с тем, что элементы обрабатываются позже, и этот процесс ожидает метод, который определен только в
ArrayList
. Исключение сообщает вам, что не удалось найти искомый метод.Создайте новый
ArrayList
с содержимым старого.new ArrayList<String>(myList);
источник
Взгляните на ArrayList # addAll (Коллекция)
Итак, в основном вы можете использовать
ArrayList<String> listOfStrings = new ArrayList<>(list.size()); listOfStrings.addAll(list);
источник
В Kotlin List можно преобразовать в ArrayList, передав его в качестве параметра конструктора.
источник
Arrays.asList
не возвращает экземпляр,java.util.ArrayList
но возвращает экземплярjava.util.Arrays.ArrayList
.Вам нужно будет преобразовать в ArrayList, если вы хотите получить доступ к
ArrayList
определенной информации.allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
источник
Испытанный подход.
public static ArrayList<String> listToArrayList(List<Object> myList) { ArrayList<String> arl = new ArrayList<String>(); for (Object object : myList) { arl.add((String) object); } return arl; }
источник