Interface WeakReferenceManager<T>

All Known Implementing Classes:
ArrayWeakReferenceManager, LinkedWeakReferenceManager

public interface WeakReferenceManager<T>
A helper for managing a list of weakly-reachable items. Implementations hide the internal management of cleared references and provide for iteration over the valid (still reachable) items.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(T item)
    Add item to this WeakReferenceManager.
    void
    Clear all items from this WeakReferenceManager.
    default void
    forEachValidReference(@NotNull Consumer<T> consumer)
    Invoke consumer.accept(item) for each item previously added to this WeakReferenceManager whose reference has not been cleared (i.e.
    void
    forEachValidReference(@NotNull Consumer<T> consumer, boolean parallel)
    Invoke consumer.accept(item) for each item previously added to this WeakReferenceManager whose reference has not been cleared (i.e.
    getFirst(@NotNull Predicate<T> test)
    Retrieve the first valid item for which test.test(item) returns true.
    boolean
    Check whether this WeakReferenceManager is empty.
    void
    remove(T item)
    Remove item from this WeakReferenceManager, along with any cleared references.
    void
    removeAll(@NotNull Collection<T> items)
    Remove all items in items from this WeakReferenceManager, along with any cleared references.
  • Method Details

    • add

      void add(T item)
      Add item to this WeakReferenceManager.
      Parameters:
      item - The item to add
    • remove

      void remove(T item)
      Remove item from this WeakReferenceManager, along with any cleared references. Comparison is strictly by reference equality, so item must be the same object as one previously added.
      Parameters:
      item - The item to remove
    • removeAll

      void removeAll(@NotNull @NotNull Collection<T> items)
      Remove all items in items from this WeakReferenceManager, along with any cleared references. Comparison is strictly by reference equality.
      Parameters:
      items - The items to remove
    • forEachValidReference

      default void forEachValidReference(@NotNull @NotNull Consumer<T> consumer)
      Invoke consumer.accept(item) for each item previously added to this WeakReferenceManager whose reference has not been cleared (i.e. because it was garbage-collected). Removes cleared references as a side effect. This overload is the same as forEachValidReference(consumer, false); that is, it does not parallelize.
      Parameters:
      consumer - The consumer to call for each valid item
    • forEachValidReference

      void forEachValidReference(@NotNull @NotNull Consumer<T> consumer, boolean parallel)
      Invoke consumer.accept(item) for each item previously added to this WeakReferenceManager whose reference has not been cleared (i.e. because it was garbage-collected). Removes cleared references as a side effect.
      Parameters:
      consumer - The consumer to call for each valid item
      parallel - Whether to attempt to invoke consumer in parallel if the implementation supports this
    • getFirst

      T getFirst(@NotNull @NotNull Predicate<T> test)
      Retrieve the first valid item for which test.test(item) returns true. Any cleared references encountered are removed as a side effect.
      Parameters:
      test - The test to decide if a valid item should be returned
      Returns:
      The first valid item that passed test, or null if no such item existed
    • isEmpty

      boolean isEmpty()
      Check whether this WeakReferenceManager is empty. Does not check for cleared references, and so a true return does not guarantee that items will be encountered by subsequent methods.
      Returns:
      Whether this WeakReferenceManager is empty
    • clear

      void clear()
      Clear all items from this WeakReferenceManager.