有人知道是否有标准方法可以从Iterator实例创建List吗?
IteratorUtils.toList(iterator);
使用 Iterator
获取每个元素并将其添加到 List
中。
List<String> list = new LinkedList<String>();
while(iter.hasNext()) { // iter is of type Iterator<String>
list.add(iter.next());
}
iterator.forEachRemaining(list::add)
来替换循环。 - shmosel在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);
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)
这是我将列表转换为迭代器,反之亦然的方法。
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 + " ");
}
Iterator
创建一个List
并没有太多意义。这就像仅仅从索引创建一个数组! - adarshr