私は次の方法を持っています...実際に文のリストを取り、各文を単語に分割します。はい、これ:
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());
より良い提案はありますか?
まず、マップが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+")));
リストの実際のインスタンスがArrayList
である場合、キャストは機能します。たとえば、Vector
(List
の別の拡張)の場合、ClassCastExceptionがスローされます。
HashMapの定義を変更するときのエラーは、後で処理される要素が原因であり、そのプロセスはArrayList
でのみ定義されているメソッドを予期しています。例外は、探していたメソッドが見つからなかったことを示しています。
古いものの内容で新しいArrayList
を作成します。
new ArrayList<String>(myList);
ArrayList#addAll(Collection) をご覧ください
指定されたコレクション内のすべての要素を、指定されたコレクションのIteratorによって返される順序で、このリストの最後に追加します。操作の進行中に指定されたコレクションが変更された場合、この操作の動作は未定義です。 (これは、指定されたコレクションがこのリストであり、このリストが空でない場合、この呼び出しの動作は未定義であることを意味します。)
だから基本的にあなたは使うことができます
ArrayList<String> listOfStrings = new ArrayList<>(list.size());
listOfStrings.addAll(list);
Arrays.asList
は Java.util.ArrayList
のインスタンスを返しませんが、Java.util.Arrays.ArrayList
のインスタンスを返します。
ArrayList
固有の情報にアクセスする場合は、ArrayListに変換する必要があります
allWords.addAll(Arrays.asList(strTemp.toLowerCase().split("\\s+")));
Kotlinでは、コンストラクターパラメーターとして渡すことで、ListをArrayListに変換できます。
ArrayList(list)