Mam następującą metodę ... która faktycznie pobiera listę zdań i dzieli każde zdanie na słowa. Tutaj jest to:
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;
}
Muszę przekazać tę listę do hashmap w następującym formacie
HashMap<String, ArrayList<String>>
więc ta metoda zwraca List i potrzebuję arrayList? Jeśli spróbuję rzucić to nie działa ... jakieś sugestie?
Ponadto, jeśli zmienię ArrayList na List w HashMap, otrzymam
java.lang.UnsupportedOperationException
z powodu tej linii w moim kodzie
sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());
Jakieś lepsze sugestie?
UnsupportedOperationException
jest to spowodowane tym, żeArrays.asList
metoda zwraca listę o stałym rozmiarze popartą tablicą - nie można jej zmodyfikować. Rozwiązanie przedstawione tutaj przez @Jesper pozwoli tego uniknąć.Przesyłanie działa, gdy rzeczywistą instancją listy jest plik
ArrayList
. Jeśli jest, powiedzmy, aVector
(co jest kolejnym rozszerzeniemList
), zgłosi ClassCastException.Błąd podczas zmiany definicji HashMap jest spowodowany późniejszymi przetwarzanymi elementami, a ten proces oczekuje metody zdefiniowanej tylko w
ArrayList
. Wyjątek informuje, że nie znalazł metody, której szukał.Utwórz nowy
ArrayList
z zawartością starego.new ArrayList<String>(myList);
źródło
Spójrz na ArrayList # addAll (Collection)
Więc w zasadzie możesz użyć
ArrayList<String> listOfStrings = new ArrayList<>(list.size()); listOfStrings.addAll(list);
źródło
W Kotlin List można przekonwertować na ArrayList poprzez przekazanie jej jako parametru konstruktora.
źródło
Arrays.asList
nie zwraca wystąpienia,java.util.ArrayList
ale zwraca wystąpieniejava.util.Arrays.ArrayList
.Jeśli chcesz uzyskać dostęp do
ArrayList
określonych informacji, musisz przekonwertować je na ArrayListallWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
źródło
Wypróbowane i sprawdzone podejście.
public static ArrayList<String> listToArrayList(List<Object> myList) { ArrayList<String> arl = new ArrayList<String>(); for (Object object : myList) { arl.add((String) object); } return arl; }
źródło