import java.util.LinkedList;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.ModifiableObservableListBase;
import javafx.collections.ListChangeListener;
import java.util.Collection;
import java.util.Arrays;
public class Main {
public static void main
(String[] args
) { ObservableList<String> test = new ObservableLimitedList<>(5);
test.addListener((ListChangeListener<String>)(change -> {
System.
out.
println("change: " + change
); }));
test.add("test1");
test.add("test2");
test.add("test3");
test.add("test4");
test.add("test5");
test.add("test6");
test.add("test7");
System.
out.
println("final list: " + test
); }
}
class ObservableLimitedList<T> extends ModifiableObservableListBase<T> {
private LinkedList<T> list;
private int maxSize;
public ObservableLimitedList(int maxSize) {
this.maxSize = maxSize;
list = new LinkedList<>();
}
@Override
public boolean add(T element) {
boolean result = super.add(element);
if (size() > maxSize) {
remove(0);
}
return result;
}
// delegate overrides:
@Override
public T get(int index) {
return list.get(index);
}
@Override
public int size() {
return list.size();
}
@Override
protected void doAdd(int index, T element) {
list.add(index, element);
}
@Override
protected T doSet(int index, T element) {
return list.set(index, element);
}
@Override
protected T doRemove(int index) {
return list.remove(index);
}
}