迭代器模式一般應用于需要對元素進行遍歷的集合,列表,哈希表等。需要實現(xiàn)可迭代化接口(Iterable<T>)里的 public Iterator<Person> iterator()方法。Iterator接口需要實現(xiàn) hasNext和next方法。
public static void main(String[] args) {
for (Person person : new Persons()) {
System.out.println(person);
}
}
@Data
@AllArgsConstructor
public static class Person {
private String name;
private Integer age;
}
public static class Persons implements Iterable<Person> {
private List<Person> getPersons() {
return IntStream.range(0, 5).mapToObj((i) ->
new Person("kaka" + i, 20 + i)
).collect(Collectors.toList());
}
@Override
public Iterator<Person> iterator() {
// return this.getPersons().iterator();
return new LinkedIterator();
}
}
public static class Node {
public int val;
public Node next;
private Node(int val) {
this.val = val;
}
private Node(int val, Node next) {
this.val = val;
this.next = next;
}
}
static {
Node node4 = new Node(4);
Node node3 = new Node(3, node4);
Node node2 = new Node(2, node3);
node = new Node(1, node2);
}
private static Node node;
public static class LinkedIterator implements Iterator<Person> {
Node cur = node;
@Override
public boolean hasNext() {
return cur != null;
}
@Override
public Person next() {
Person person = new Person("kaka" + cur.val, cur.val);
cur = cur.next;
return person;
}
}