将<string>列表到ArrayList <string>转换问题</string> </string>

时间:2012-10-30 08:12:21

标签: 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;
}

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

HashMap<String, ArrayList<String>>

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

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

java.lang.UnsupportedOperationException

因为我的代码中的这一行

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

有更好的建议吗?

7 个答案:

答案 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特定信息

,则需要转换为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);