diff options
Diffstat (limited to 'src/main/java/makamys/neodymium/util')
-rw-r--r-- | src/main/java/makamys/neodymium/util/RecyclingList.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/main/java/makamys/neodymium/util/RecyclingList.java b/src/main/java/makamys/neodymium/util/RecyclingList.java new file mode 100644 index 0000000..ea240bb --- /dev/null +++ b/src/main/java/makamys/neodymium/util/RecyclingList.java @@ -0,0 +1,37 @@ +package makamys.neodymium.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class RecyclingList<T> { + + private Supplier<T> constructor; + + int nextIndex; + private List<T> list; + + public RecyclingList(Supplier<T> constructor) { + this.constructor = constructor; + this.list = new ArrayList<T>(); + } + + public T get(int i) { + while(list.size() <= i) { + list.add(constructor.get()); + } + return list.get(i); + } + + public T next() { + return get(nextIndex++); + } + + public void reset() { + nextIndex = 0; + } + + public List<T> getAsList() { + return list.subList(0, nextIndex); + } +} |