位置:org.springframework.util
�实现接口:java.util.Iterator
继承类:无
作用:组合多个其他迭代器的复合迭代器
一、效果
维护一个迭代器的链接集,这些链接器按顺序调用,直到用尽所有迭代器。
/*
下面的程序输出:
arr1
arr2
link1
link2
*/
@Test
public void test1(){
CompositeIterator<String> compositeIterator = new CompositeIterator<>();
List<String> arrayList = new ArrayList<String>();
arrayList.add("arr1");
arrayList.add("arr2");
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("link1");
linkedList.add("link2");
// 将现有的集合的迭代器添加到复合迭代器中
compositeIterator.add(arrayList.listIterator());
compositeIterator.add(linkedList.listIterator());
while(compositeIterator.hasNext()){
System.out.println(compositeIterator.next());
}
}
二、API
// 添加给定迭代器实例
public void add(Iterator<E> iterator) {
Assert.state(!this.inUse, "You can no longer add iterators to a composite iterator that's already in use");
if (this.iterators.contains(iterator)) {
throw new IllegalArgumentException("You cannot add the same iterator twice");
}
this.iterators.add(iterator);
}
// 判断迭代器是否存在下一个元素,存在则返回true,否则返回false。
public boolean hasNext() {
this.inUse = true;
for (Iterator<E> iterator : this.iterators) {
if (iterator.hasNext()) {
return true;
}
}
return false;
}
// 获取迭代器的下一个元素
public E next() {
this.inUse = true;
for (Iterator<E> iterator : this.iterators) {
if (iterator.hasNext()) {
return iterator.next();
}
}
throw new NoSuchElementException("All iterators exhausted");
}
三、总结
该类是一个组合模式的简单实现。可以忽略不同集合的差别,统一地迭代组合结构中的所有元素。
四、补充
无
参考资料: 组合模式 | 菜鸟教程