位置:org.springframework.util
�实现接口:java.util.Iterator
继承类:无
作用:组合多个其他迭代器的复合迭代器

一、效果

维护一个迭代器的链接集,这些链接器按顺序调用,直到用尽所有迭代器。

  1. /*
  2. 下面的程序输出:
  3. arr1
  4. arr2
  5. link1
  6. link2
  7. */
  8. @Test
  9. public void test1(){
  10. CompositeIterator<String> compositeIterator = new CompositeIterator<>();
  11. List<String> arrayList = new ArrayList<String>();
  12. arrayList.add("arr1");
  13. arrayList.add("arr2");
  14. LinkedList<String> linkedList = new LinkedList<>();
  15. linkedList.add("link1");
  16. linkedList.add("link2");
  17. // 将现有的集合的迭代器添加到复合迭代器中
  18. compositeIterator.add(arrayList.listIterator());
  19. compositeIterator.add(linkedList.listIterator());
  20. while(compositeIterator.hasNext()){
  21. System.out.println(compositeIterator.next());
  22. }
  23. }

二、API

  1. // 添加给定迭代器实例
  2. public void add(Iterator<E> iterator) {
  3. Assert.state(!this.inUse, "You can no longer add iterators to a composite iterator that's already in use");
  4. if (this.iterators.contains(iterator)) {
  5. throw new IllegalArgumentException("You cannot add the same iterator twice");
  6. }
  7. this.iterators.add(iterator);
  8. }
  9. // 判断迭代器是否存在下一个元素,存在则返回true,否则返回false。
  10. public boolean hasNext() {
  11. this.inUse = true;
  12. for (Iterator<E> iterator : this.iterators) {
  13. if (iterator.hasNext()) {
  14. return true;
  15. }
  16. }
  17. return false;
  18. }
  19. // 获取迭代器的下一个元素
  20. public E next() {
  21. this.inUse = true;
  22. for (Iterator<E> iterator : this.iterators) {
  23. if (iterator.hasNext()) {
  24. return iterator.next();
  25. }
  26. }
  27. throw new NoSuchElementException("All iterators exhausted");
  28. }

三、总结

该类是一个组合模式的简单实现。可以忽略不同集合的差别,统一地迭代组合结构中的所有元素。

四、补充


参考资料: 组合模式 | 菜鸟教程