package com.google.sitebricks.util; import com.google.common.collect.Lists; import java.util.List; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; /** * Adds elements to a list, will remove oldest items * if the maximum specified capacity is exceeded. * * TheadSafe & concurrent. */ public class BoundedDiscardingList<E> { private final Queue<E> queue = new ConcurrentLinkedQueue<E>(); private final int maxlength; public BoundedDiscardingList(int maxlength) { this.maxlength = maxlength; } public boolean add(E item) { queue.add(item); if (queue.size() > maxlength) { queue.poll(); } return true; } /** * Returns a snapshot of the list at *some* point in time. */ public List<E> list() { return Lists.newArrayList(queue); } }