package rfx.server.util; import java.util.Arrays; import java.util.List; public class RoundRobin<T> { private List<T> values; private int N = 0; private int counter = -1; private T singleValue; public T next() { if(singleValue != null){ return singleValue; } else { counter = (counter + 1) % N; // % is the remainder operator return values.get(counter); } } public RoundRobin(T value){ singleValue = value; N = 1; } public RoundRobin(List<T> list){ values = list; N = values.size(); } public static void main(String[] args) { String str = "A, B, C, D"; List<String> items = Arrays.asList(str.split("\\s*,\\s*")); RoundRobin<String> roundRobin = new RoundRobin<>(items); for (int i = 0; i < 10; i++) { System.out.println(roundRobin.next()); } } }