列表<字符串>到数组列表<字符串>转换问题

2022-08-31 10:02:35

我有以下方法...它实际上采用句子列表并将每个句子拆分为单词。这是它:

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?如果我试图投掷,它不起作用...有什么建议吗?

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

java.lang.UnsupportedOperationException

因为我的代码中有这一行

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

有什么更好的建议吗?


答案 1

强制转换工作,其中列表的实际实例是 .如果它是,比如说,a(这是 的另一个扩展),它将抛出一个 ClassCastException。ArrayListVectorList

更改 HashMap 定义时出现错误是由于稍后要处理的元素造成的,并且该进程需要仅在 中定义的方法。异常告诉您它没有找到它正在寻找的方法。ArrayList

使用旧内容创建一个新。ArrayList

new ArrayList<String>(myList);

答案 2

首先,为什么地图是 a 而不是 a ?为什么值必须是接口的特定实现(在这种情况下)有什么原因吗?HashMap<String, ArrayList<String>>HashMap<String, List<String>>ListArrayList

Arrays.asList不返回 a,因此无法将 的返回值赋给 类型的变量。java.util.ArrayListArrays.asListArrayList

而不是:

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

试试这个:

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