gpt4 book ai didi

java - 自定义迭代器,可以遍历迭代器

转载 作者:行者123 更新时间:2023-12-01 11:07:29 24 4
gpt4 key购买 nike

如何自定义一个迭代器可以遍历list中哪个元素也是list,例如{{1,2,3},{4,5,6}},这个自定义迭代器可以输出{1,2,3, 4,5,6}

class CustomIterator<E> implements Iterator<E>{

public CustomIterator(Iterator<Iterator<E>> root){
//add implement code...
}

//add implement code...

}

最佳答案

这个问题我花了很多时间,终于弄清楚了,下面是完整的实现和测试代码,感谢@AlexHall的大力帮助。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

class IteratorFlattener<E> implements Iterator<E> {
private Iterator<Iterator<E>> root;
private Iterator<E> sub;
public IteratorFlattener(Iterator<Iterator<E>> root) {
this.root = root;
if(root.hasNext()){
this.sub = root.next();
}
}

@Override
public boolean hasNext(){
if(sub != null){
if(sub.hasNext()){
return true;
}
if(root.hasNext()){
sub = root.next();
return sub.hasNext();
}
}
return false;
}


@Override
public E next(){
if(sub == null){
throw new NoSuchElementException("root iterator was empty");
}
return sub.next();
}

@Override
public void remove(){
if(sub == null){
throw new NoSuchElementException("root iterator was empty");
}
sub.remove();
}

public static void main(String[] args){
System.out.println("start to test traverse");
List<Integer> l1 = new ArrayList<>();
l1.add(1);
List<Integer> l2 = new ArrayList<>();
l2.add(2);
l2.add(3);
List<Integer> l3 = new ArrayList<>();
l3.add(4);
l3.add(5);
l3.add(6);
List<Iterator<Integer>> root = new ArrayList<>();
root.add(l1.iterator());
root.add(l2.iterator());
root.add(l3.iterator());
IteratorFlattener it = new IteratorFlattener<>(root.iterator());
while(it.hasNext()){
System.out.println(it.next());
}

System.out.println("start to test remove method");
l1 = new ArrayList<>();
l1.add(1);
l2 = new ArrayList<>();
l2.add(2);
l2.add(3);
l3 = new ArrayList<>();
l3.add(4);
l3.add(5);
l3.add(6);
root = new ArrayList<>();
root.add(l1.iterator());
root.add(l2.iterator());
root.add(l3.iterator());
int i = 0;
it = new IteratorFlattener<>(root.iterator());
while(it.hasNext() && i < 3){
it.next();
it.remove();
i++;
}
while(it.hasNext()){
System.out.println(it.next());
}
}
}

关于java - 自定义迭代器,可以遍历迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32795132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com