001package com.ericlam.mc.minigames.core.function;
002
003import java.util.Collection;
004import java.util.Iterator;
005import java.util.LinkedList;
006import java.util.List;
007
008/**
009 * 循環迭代器
010 *
011 * @param <E> 自定義類
012 */
013public final class CircularIterator<E> implements Iterator<E> {
014
015    private final List<E> list;
016    private int index = 0;
017
018    public CircularIterator(Collection<E> list) {
019        this.list = new LinkedList<>(list);
020    }
021
022    @Override
023    public boolean hasNext() {
024        return !list.isEmpty();
025    }
026
027    @Override
028    public E next() {
029        index = ++index > list.size() - 1 ? 0 : index;
030        return list.get(index);
031    }
032
033    public boolean hasPrevious() {
034        return !list.isEmpty();
035    }
036
037    public E previous() {
038        index = --index < 0 ? list.size() - 1 : index;
039        return list.get(index);
040    }
041
042    public int nextIndex() {
043        return index + 1;
044    }
045
046
047    public int previousIndex() {
048        return index - 1;
049    }
050}