10

Iterator インスタンスから List を作成する標準的な方法があるかどうか知っている人はいますか?

4

6 に答える 6

14

私は一般的にグアバを依存関係として持っており、すでに存在しているため、グアバの方に傾いています。Lists.newArrayList(Iterator)

于 2012-06-13T15:36:14.887 に答える
5

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

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

while(iter.hasNext()) { // iter is of type Iterator<String>
    list.add(iter.next());
}
于 2012-06-13T15:33:43.287 に答える
4

Java 8 では、次の方法を使用できます (十分に冗長ですが)。

Iterator<String> iterator = ...;
List<String> list = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
                                 .collect(Collectors.toList());

また

Iterator<String> iterator = ...;
List<String> list = new ArrayList<>(); // or LinkedList() if more relevant (adding being faster for LinkedList)
iterator.forEachRemaining(list::add);
于 2018-04-09T14:35:58.717 に答える
2

次のようなことを試してください。

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

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

}

注意すべきことの 1 つは、反復子が構造体の先頭にない場合、前の要素を取得する方法がないことです。

反復子の元のコレクションがある場合は、コレクションを受け取るコンストラクターを使用してリストを作成できます。例:LinkedListコンストラクター:

LinkedList(Collection<? extends E> c) 
于 2012-06-13T15:35:40.893 に答える
1

これは、List から Iterator に、またはその逆に変換する方法です。

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 + " ");

} 
于 2012-06-13T15:36:06.230 に答える