位置:org.springframework.util
�实现接口:java.util.Iterator
继承类:无
作用:组合多个其他迭代器的复合迭代器
一、效果
维护一个迭代器的链接集,这些链接器按顺序调用,直到用尽所有迭代器。
/*下面的程序输出:arr1arr2link1link2*/@Testpublic 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");}
三、总结
该类是一个组合模式的简单实现。可以忽略不同集合的差别,统一地迭代组合结构中的所有元素。
四、补充
无
参考资料: 组合模式 | 菜鸟教程
