任何人都知道是否有从Iterator实例创建List的标准方法?
答案 0 :(得分:14)
我倾向于Guava's Lists.newArrayList(Iterator)
,因为我通常将番石榴作为依赖,并且它已经存在。
答案 1 :(得分:6)
我有这个需求,作为Apache Commons的用户,这就是我所做的:
IteratorUtils.toList(iterator);
答案 2 :(得分:3)
使用Iterator
获取每个元素并将其添加到List
。
List<String> list = new LinkedList<String>();
while(iter.hasNext()) { // iter is of type Iterator<String>
list.add(iter.next());
}
答案 3 :(得分:1)
在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);
答案 4 :(得分: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)
答案 5 :(得分:0)
这是我从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 + " ");
}