【发布时间】:2013-10-10 10:17:22
【问题描述】:
我有一个嵌套集合,这个表示Collection<Collection<T>>。我已经在类上实现了迭代器,但是 next() 方法没有给出正确的结果。它只获取每个列表的第一个元素。示例 List<List<String>> 和值为 {"1","2"},{"3","4"},{"5","6"}。类的完整布局。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class NestedCollectionIterator implements Iterator<Object> {
private Collection<? extends Collection<? extends Object>> _collOfColl = null;
private Iterator<? extends Collection<? extends Object>> itCollection = null;
private Iterator<? extends Object> innerIterator = null;
Object next = null;
public NestedCollectionIterator( Collection<? extends Collection<? extends Object>> collofColl){
_collOfColl = collofColl;
itCollection = _collOfColl.iterator();
}
@Override
public boolean hasNext() {
if(itCollection.hasNext()){
innerIterator = itCollection.next().iterator();
if(innerIterator != null || innerIterator.hasNext()){
next = innerIterator.next();
return true;
}
}
return false;
}
public Object next() {
if(hasNext()){
Object obj = next;
//Need some changes here.
return obj;
}
return null;
}
@Override
public void remove() {}
}
测试实现的类
class Sample{
public static void main(String[] args){
List<List<String>> Nestedlist = new ArrayList<List<String>>();
List<String> l = new ArrayList<String>();
l.add("1");
l.add("2");
Nestedlist.add(l);
l = new ArrayList<String>();
l.add("3");
l.add("4");
Nestedlist.add(l);
l = new ArrayList<String>();
l.add("5");
l.add("6");
Nestedlist.add(l);
NestedCollectionIterator cc = new NestedCollectionIterator(Nestedlist);
while(cc.hasNext()){
System.out.println(cc.next.toString());
}
}
}
结果是 1,3,5。如何让列表先遍历列表中的所有元素,然后移动到其中的下一个集合项?
谢谢。
【问题讨论】:
-
目前你对
Iterator接口的“实现”只是说你没有任何元素。你试过什么,发生了什么? (“没有给出正确的结果”是不够的信息。) -
你有多少关卡?只有 1 个?
-
好吧,
return null;似乎不对,我同意。但问题是什么?I tried to implement请加倍努力,因为只是添加了一些字段,否则将生成的方法保持原样并没有太多“实现”... -
如果您发布代码(以及足够详细地描述问题)并且我们会告诉您您做错了什么,而不是我们只是从头开始提供解决方案,您将学到更多。这也恰好是Stack Overflow 问题所必需的。
-
我已经更新了代码和问题。请检查
标签: java loops collections iterator