列出<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

 HashMap<String, ArrayList<String>> 

所以这个方法返回列表,我需要一个arrayList? 如果我试图施展它不锻炼…任何build议?

另外,如果我在一个HashMap中将ArrayList更改为List,我会得到

 java.lang.UnsupportedOperationException 

因为我的代码中的这一行

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

有更好的build议吗?

首先,为什么映射是HashMap<String, ArrayList<String>>而不是HashMap<String, List<String>> ? 有什么理由为什么值必须是接口List (在这种情况下是ArrayList )的具体实现?

Arrays.asList不会返回java.util.ArrayList ,所以您不能将Arrays.asList的返回值Arrays.asListArrayListtypes的variables。

代替:

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

尝试这个:

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

Cast工作的地方是列表的实际实例是一个ArrayList 。 如果它是一个Vector (这是List另一个扩展),它将抛出一个ClassCastExceptionexception。

更改HashMap的定义时出错是由于稍后正在处理元素,并且该进程需要一个仅在ArrayList定义的方法。 exception告诉你,它没有find它正在寻找的方法。

用旧的内容创build一个新的ArrayList

 new ArrayList<String>(myList); 

看看ArrayList#addAll(Collection)

将指定集合中的所有元素追加到此列表的末尾,按指定集合的​​Iterator返回的顺序排列。 如果指定的集合在操作过程中被修改,则此操作的行为是未定义的。 (这意味着如果指定的集合是这个列表,这个调用的行为是不确定的,并且这个列表是非空的。)

所以基本上你可以使用

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

Arrays.asList不返回java.util.ArrayList实例,但它返回java.util.Arrays.ArrayList实例。

如果你想访问ArrayList特定信息,你将需要转换为ArrayList

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