fork download
  1. import java.util.LinkedList;
  2. import javafx.collections.FXCollections;
  3. import javafx.collections.ObservableList;
  4. import javafx.collections.ModifiableObservableListBase;
  5. import javafx.collections.ListChangeListener;
  6. import java.util.Collection;
  7. import java.util.Arrays;
  8.  
  9. public class Main {
  10. public static void main(String[] args) {
  11. ObservableList<String> test = new ObservableLimitedList<>(5);
  12.  
  13. test.addListener((ListChangeListener<String>)(change -> {
  14. System.out.println("change: " + change);
  15. }));
  16.  
  17. test.add("test1");
  18. test.add("test2");
  19. test.add("test3");
  20. test.add("test4");
  21. test.add("test5");
  22. test.add("test6");
  23. test.add("test7");
  24.  
  25. System.out.println("final list: " + test);
  26. }
  27. }
  28.  
  29. class ObservableLimitedList<T> extends ModifiableObservableListBase<T> {
  30. private LinkedList<T> list;
  31. private int maxSize;
  32.  
  33. public ObservableLimitedList(int maxSize) {
  34. this.maxSize = maxSize;
  35. list = new LinkedList<>();
  36. }
  37.  
  38. @Override
  39. public boolean add(T element) {
  40. boolean result = super.add(element);
  41. if (size() > maxSize) {
  42. remove(0);
  43. }
  44. return result;
  45. }
  46.  
  47. // delegate overrides:
  48.  
  49. @Override
  50. public T get(int index) {
  51. return list.get(index);
  52. }
  53.  
  54. @Override
  55. public int size() {
  56. return list.size();
  57. }
  58.  
  59. @Override
  60. protected void doAdd(int index, T element) {
  61. list.add(index, element);
  62. }
  63.  
  64. @Override
  65. protected T doSet(int index, T element) {
  66. return list.set(index, element);
  67. }
  68.  
  69. @Override
  70. protected T doRemove(int index) {
  71. return list.remove(index);
  72. }
  73. }
Success #stdin #stdout 0.23s 321920KB
stdin
Standard input is empty
stdout
change: { [test1] added at 0 }
change: { [test2] added at 1 }
change: { [test3] added at 2 }
change: { [test4] added at 3 }
change: { [test5] added at 4 }
change: { [test6] added at 5 }
change: { [test1] removed at 0 }
change: { [test7] added at 5 }
change: { [test2] removed at 0 }
final list: [test3, test4, test5, test6, test7]