我有一个以下方法......它实际上采用句子列表并将每个句子分成单词。这是它:
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,我需要一个arrayList?如果我试图施展它不会锻炼...任何建议?
另外,如果我在一个HashMap中将ArrayList更改为List,我会得到
java.lang.UnsupportedOperationException
因为我的代码中的这一行
sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());
有更好的建议吗?
答案 0 :(得分:153)
Cast的工作原理是列表的实际实例为ArrayList
。如果它是,例如Vector
(这是List
的另一个扩展名),它将抛出ClassCastException。
更改HashMap定义时的错误是由于稍后处理了元素,并且该过程需要仅在ArrayList
中定义的方法。该例外告诉您它没有找到它正在寻找的方法。
使用旧内容创建新的ArrayList
。
new ArrayList<String>(myList);
答案 1 :(得分:42)
首先,为什么地图是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 :(得分:31)
查看ArrayList#addAll(Collection)
将指定集合中的所有元素追加到末尾 此列表,按指定的返回顺序排列 集合的迭代器。如果,则此操作的行为未定义 操作进入时修改指定的集合 进展。 (这意味着如果这个调用的行为是未定义的 指定的集合是此列表,此列表是非空的。)
所以基本上你可以使用
ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);
答案 3 :(得分:5)
Arrays.asList
不会返回java.util.ArrayList
的实例,但会返回java.util.Arrays.ArrayList
的实例。
如果要访问ArrayList
特定信息
allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
答案 4 :(得分:4)
在Kotlin列表中,可以通过将其作为构造函数参数传递来将其转换为ArrayList。
4
答案 5 :(得分:0)
经过验证的方法。
public static ArrayList<String> listToArrayList(List<Object> myList) {
ArrayList<String> arl = new ArrayList<String>();
for (Object object : myList) {
arl.add((String) object);
}
return arl;
}
答案 6 :(得分:0)
这来得有点晚,但想到了一个简单的方法来回答将 List 转换为 ArrayList。
简单的方法
public static <T> ArrayList<T> listToArrayList(List<T> list) {
return list != null ? new ArrayList<>(list) : null;
}
经典方式
public static <T> ArrayList<T> listToArrayList(List<T> list) {
ArrayList<T> arrayList = new ArrayList<>();
if (list != null) {
for (int i = 0; i < list.size(); i++) {
arrayList.add(list.get(i));
i++;
}
// or simply
// arrayList.addAll(list);
}
return arrayList;
}
使用
listToArrayList(yourList);