List<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<String, ArrayList<String>>

所以这个方法返回 List 而我需要一个 ArrayList?如果我尝试投射它不成功……有什么建议吗?

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

java.lang.UnsupportedOperationException

因为我的代码中有这一行

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

有更好的建议吗?

原文由 Skipper07 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 556
2 个回答

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

Arrays.asList does not return a java.util.ArrayList , so you can’t assign the return value of Arrays.asList to a variable of type ArrayList .

代替:

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

尝试这个:

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

原文由 Jesper 发布,翻译遵循 CC BY-SA 3.0 许可协议

Cast 在列表的实际实例为 ArrayList 的情况下工作。例如,如果它是 Vector (这是 List 的另一个扩展),它将抛出 ClassCastException。

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

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

 new ArrayList<String>(myList);

原文由 SJuan76 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题