列出<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.asList
给ArrayList
types的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+")));