列出<String>到ArrayList <String>转换问题

Ski*_*r07 79 java list arraylist

我有一个以下方法......它实际上采用句子列表并将每个句子分成单词.就这个:

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;
}
Run Code Online (Sandbox Code Playgroud)

我必须以下列格式将此列表传递给散列映射

HashMap<String, ArrayList<String>>
Run Code Online (Sandbox Code Playgroud)

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

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

java.lang.UnsupportedOperationException
Run Code Online (Sandbox Code Playgroud)

因为我的代码中有这一行

sentenceList.add(((Element)sentenceNodeList.item(sentenceIndex)).getTextContent());
Run Code Online (Sandbox Code Playgroud)

有更好的建议吗?

SJu*_*n76 167

Cast工作的位置是列表的实际实例ArrayList.如果它是,例如,a Vector(它是另一个扩展List),它将抛出ClassCastException.

更改HashMap定义时的错误是由于稍后要处理的元素,并且该进程需要仅在其中定义的方法ArrayList.该例外告诉您它没有找到它正在寻找的方法.

ArrayList使用旧内容创建新内容.

new ArrayList<String>(myList);
Run Code Online (Sandbox Code Playgroud)

  • 个人觉得这是最可读的答案 (4认同)

Jes*_*per 48

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

Arrays.asList不返回a java.util.ArrayList,因此您无法将返回值Arrays.asList赋给类型变量ArrayList.

代替:

allWords = Arrays.asList(strTemp.toLowerCase().split("\\s+"));
Run Code Online (Sandbox Code Playgroud)

试试这个:

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
Run Code Online (Sandbox Code Playgroud)

  • 特别是引起了`UnsupportedOperationException`,因为`Arrays.asList`方法返回一个由数组支持的固定大小的列表 - 它不能被修改.@Jesper在此提出的解决方案将避免这种情况. (2认同)

Mad*_*mer 35

看看ArrayList#addAll(Collection)

将指定集合中的所有元素按指定集合的​​迭代器返回的顺序附加到此列表的末尾.如果在操作正在进行时修改了指定的集合,则此操作的行为是不确定的.(这意味着如果指定的集合是此列表,则此调用的行为是未定义的,并且此列表是非空的.)

所以基本上你可以使用

ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);
Run Code Online (Sandbox Code Playgroud)


Sha*_*auf 8

在Kotlin中,可以通过将List作为构造函数参数传递来将其转换为ArrayList。

ArrayList(list)
Run Code Online (Sandbox Code Playgroud)


Ami*_*nde 5

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

如果要访问ArrayList特定信息,则需要转换为ArrayList

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
Run Code Online (Sandbox Code Playgroud)