2012-10-30 35 views
44

私は以下の方法を持っています...実際には文のリストを取り、各文を単語に分割します。ここでは、次のとおりです。リスト<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>> 

をこのリストを渡す必要がありので、このメソッドは、リストを返し、私はArrayListに必要ですか?私がキャストしようとすると、運動しない...どんな提案?私はHashMapののリストにArrayListのを変更した場合

はまた、私は私のコード

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

であるため、この行のいずれかのより良い提案を

java.lang.UnsupportedOperationException 

を取得しますか?

答えて

33

ファーストを使用することができ、なぜ地図はHashMap<String, ArrayList<String>>で、HashMap<String, List<String>>ではありませんか?値がインターフェイスList(この場合はArrayList)の特定の実装でなければならない理由はありますか?

Arrays.asListjava.util.ArrayListを返さないため、戻り値Arrays.asListArrayListの変数に代入することはできません。

の代わりに:

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

これを試してみてください:

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

ある感じ、 'Arrays.asList'方法は、A返すので、特に' UnsupportedOperationException'が発生します配列を基にした固定サイズのリスト - 変更することはできません。 @Jesperによってここに提示された解決策は、それを避けるでしょう。 –

+0

ありがとう...それが解決されました – Skipper07

4

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

あなたがリストの実際のインスタンスがArrayListあるArrayList特定の情報

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

キャスト作品にアクセスしたい場合はArrayListに変換する必要があります。例えば、Vector(別の拡張子はList)であれば、ClassCastExceptionがスローされます。

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

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

new ArrayList<String>(myList); 
+1

は個人的に、これが最も読みやすい答え – SARose

20

ArrayList#addAll(Collection)

を見ては、彼らが指定 コレクションの反復子によって返される順序で、 このリストの最後に指定されたコレクション内のすべての要素を追加してください。操作が の進行中に 指定されたコレクションが変更された場合、この操作の動作は未定義です。 (これは 指定されたコレクションがこのリストで、このリストが空でない場合は、この呼び出しの動作は保証されません。)

をだから、基本的にはすべての

ArrayList<String> listOfStrings = new ArrayList<>(list.size()); 
listOfStrings.addAll(list); 
関連する問題