web-dev-qa-db-ja.com

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が必要ですか?キャストしようとしてもうまくいきません...提案はありますか?

また、HashMapでArrayListをListに変更すると、

Java.lang.UnsupportedOperationException

私のコードのこの行のため

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

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

73
Skipper07

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

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

の代わりに:

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

これを試して:

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

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

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

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

new ArrayList<String>(myList);
155
SJuan76

ArrayList#addAll(Collection) をご覧ください

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

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

ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);
31
MadProgrammer

Arrays.asListJava.util.ArrayList のインスタンスを返しませんが、Java.util.Arrays.ArrayListのインスタンスを返します。

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

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

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

ArrayList(list)
4
Shahab Rauf