2012-06-13 20 views
6

イテレータインスタンスからリストを作成する標準的な方法があれば誰でも知っていますか?リストを作成<T>イテレータからのインスタンス<T>

+1

あなたはイテレータからリストを作成することはできません、あなたがリストを作成することができますそれを要素とするイテレータがあります。 – Sajmon

+0

'Iterator'から' List'を作成することは実際には意味がありません。これは単なるインデックスから配列を作成するようなものです! – adarshr

+0

イテレータに既に 'next()'関数が呼び出されている場合、以前の要素を取得することはできません。 –

答えて

3

Iteratorを使用してすべての要素を取得し、Listに追加します。

List<String> list = new LinkedList<String>(); 

while(iter.hasNext()) { // iter is of type Iterator<String> 
    list.add(iter.next()); 
} 
+1

ありがとう、それは私がやったことですが、私はいくつかの魔法を望んでいましたそこに私を助けるために:) – BillMan

+0

あなたが魔法の方法を望んでいたら、あなたはPHPを使用していたはずです;) – tskuzzy

+0

あなたは魔法の方法をしたい場合は、サードパーティのライブラリを使用している必要があります。 –

0

は、次のようなものを試してください:注意する

public T List<T> listFromIterator(Iterator<T> iterator) { 

List<T> result = new LinkedList<T>(); 
    while(iterator.hasNext()) { 
    result.add(iterator.next()); 
    } 

} 

一つはイテレータがあなたの構造の先頭ではない場合、あなたは前の要素を取得する方法がないということです。

イテレータの元になっているコレクションがある場合は、コレクションを取得するコンストラクタを使用してリストを作成できます。例:LinkedListコンストラクタ:

LinkedList(Collection<? extends E> c) 
0

これは私がイテレータやその逆のためにリストから変換する方法です。

ArrayList arrayList = new ArrayList(); 
// add elements to the array list 
arrayList.add("C"); 
arrayList.add("A"); 
arrayList.add("E"); 
arrayList.add("B"); 
arrayList.add("D"); 
arrayList.add("F"); 

// use iterator to display contents of arrayList 
System.out.print("Original contents of arrayList: "); 
Iterator iterator = arrayList.iterator(); 
ArrayList arrayList2 = new ArrayList(); 

while(iterator.hasNext()) { 

    Object element = iterator.next(); 
    arrayList2.add(element); 
    System.out.print(element + " "); 

} 
関連する問題