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}