98

私は次の方法を持っています...実際に文のリストを取り、各文を単語に分割します。はい、これ:

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());

より良い提案はありますか?

4

8 に答える 8

204

キャストは、リストの実際のインスタンスがである場合に機能しますArrayList。たとえば、Vector(の別の拡張であるList)の場合、ClassCastExceptionがスローされます。

HashMapの定義を変更するときのエラーは、後で処理される要素が原因であり、そのプロセスはでのみ定義されているメソッドを想定していますArrayList。例外は、探していたメソッドが見つからなかったことを示しています。

ArrayList古いものの内容で新しいものを作成します。

new ArrayList<String>(myList);
于 2012-10-30T08:16:59.337 に答える
55

まず第一に、なぜマップはaHashMap<String, ArrayList<String>>であり、ではないのHashMap<String, List<String>>ですか?List値がインターフェイスの特定の実装(ArrayListこの場合)でなければならない理由はありますか?

Arrays.asListはを返さないため、の戻り値を型の変数にjava.util.ArrayList割り当てることはできません。Arrays.asListArrayList

それ以外の:

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

これを試して:

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
于 2012-10-30T08:18:26.260 に答える
45

ArrayList#addAll(Collection)を見てください

指定されたコレクションのすべての要素を、指定されたコレクションのイテレータによって返される順序で、このリストの最後に追加します。操作の進行中に指定されたコレクションが変更された場合、この操作の動作は未定義です。(これは、指定されたコレクションがこのリストであり、このリストが空でない場合、この呼び出しの動作が未定義であることを意味します。)

だから基本的にあなたは使うことができます

ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);
于 2012-10-30T08:17:56.590 に答える
18

Kotlinでは、リストをコンストラクターパラメーターとして渡すことでArrayListに変換できます。

ArrayList(list)
于 2019-01-12T08:44:10.350 に答える
5

Arrays.asListのインスタンスを返しませんが、のjava.util.ArrayListインスタンスを返しますjava.util.Arrays.ArrayList

ArrayList特定の情報にアクセスする場合は、ArrayListに変換する必要があります

allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
于 2012-10-30T08:14:03.753 に答える
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;

    }
于 2019-11-06T17:52:29.297 に答える
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);
于 2021-04-21T03:56:58.083 に答える
0

ArrayList listOfStrings = new ArrayList <>(list.length); listOfStrings.addAll(Arrays.asList(list));

オブジェクトリストの場合、この方法を使用してModel[]リストをArrayListに変換できます。

于 2022-01-15T15:59:09.790 に答える