
创建一个Aggregate<E>接口,表示待遍历数据集:
/*待遍历的数据集*/public interface Aggregate<E> {/*添加*/void addEle(E element);/*移除*/void removeEle(E element);/*获取迭代器*/CustomIterator<E> createCustomIterator();}
创建一个Aggregate<E>接口的实现类ConcreteArrayAggregate<E>:
/*待遍历的数据集类型为:数组类型*/public class ConcreteArrayAggregate<E> implements Aggregate<E> {private E[] array = (E[]) new Object[0];@Overridepublic void addEle(E element) {array = ArrayUtil.append(array, element);}@Overridepublic void removeEle(E element) {array = ArrayUtil.removeEle(array, element);}@Overridepublic CustomIterator<E> createCustomIterator() {return new ConcreteArrayCustomIterator<E>(array);}}
创建一个Aggregate<E>接口的实现类ConcreteListAggregate<E>:
/*待遍历的数据集类型为:列表类型*/public class ConcreteListAggregate<E> implements Aggregate<E> {private List<E> list = new ArrayList<>();@Overridepublic void addEle(E element) {list.add(element);}@Overridepublic void removeEle(E element) {list.remove(element);}@Overridepublic CustomIterator<E> createCustomIterator() {return new ConcreteListCustomIterator(list);}}
创建一个CustomIterator接口,自定义的迭代器:
/*自定义`Iterator`*/public interface CustomIterator<E> {/*是否有下一个元素*/boolean hasNext();/*获取下一个元素*/E next();/*移除当期元素*/default void remove() {throw new UnsupportedOperationException("remove");}}
创建一个CustomIterator接口的实现类ConcreteArrayCustomIterator<E>:
/*数组类型的迭代器*/public class ConcreteArrayCustomIterator<E> implements CustomIterator<E> {private E[] array; //数据集private int currentIndex = 0; //当前下标public ConcreteArrayCustomIterator(E[] array) {this.array = array;}@Overridepublic boolean hasNext() {return currentIndex < array.length;}public E next() {return array[currentIndex++];}}
创建一个CustomIterator接口的实现类ConcreteListCustomIterator<E>:
/*列表类型的迭代器*/public class ConcreteListCustomIterator<E> implements CustomIterator<E> {private List<E> list; //数据集private int currentIndex = -1; //当前下标public ConcreteListCustomIterator(List<E> list) {this.list = list;}@Overridepublic boolean hasNext() {return currentIndex < list.size() - 1;}@Overridepublic E next() {return list.get(++currentIndex);}}
客户端代码:
public class Client {public static void main(String[] args) {System.out.println("================= 迭代字符串数组 ===================");Aggregate<String> stringAggregate = new ConcreteArrayAggregate<>(){{addEle("java");addEle("python");addEle("go");addEle("c++");//移除removeEle("java");removeEle("python");}};CustomIterator<String> stringCustomIterator = stringAggregate.createCustomIterator();while (stringCustomIterator.hasNext()){String next = stringCustomIterator.next();System.out.println("next = " + next);}System.out.println("================= 迭代数字列表 ===================");Aggregate<Integer> integerAggregate = new ConcreteListAggregate<>(){{addEle(11);addEle(12);addEle(13);addEle(14);addEle(15);}};CustomIterator<Integer> integerCustomIterator = integerAggregate.createCustomIterator();while (integerCustomIterator.hasNext()){Integer next = integerCustomIterator.next();System.out.println("next = " + next);}}}
输出内容如下:
================= 迭代字符串数组 ===================next = gonext = c++================= 迭代数字列表 ===================next = 11next = 12next = 13next = 14next = 15
