Class DerivedSet<B,​E>

  • Type Parameters:
    B - The type of elements in the backing set.
    E - The type of elements in this set.
    All Implemented Interfaces:
    Serializable, Iterable<E>, Collection<E>, Set<E>, CheckedCollection<E>

    public abstract class DerivedSet<B,​E>
    extends AbstractSet<E>
    implements CheckedCollection<E>, Serializable
    A set whose values are derived from an other set. The values are derived only when requested, which make it possible to backup potentially large sets. Implementations need only to overrides baseToDerived(B) and derivedToBase(E) methods. This set do not supports null value, since null is used when no mapping from base to this exists. This class is serializable if the underlying base set is serializable too.

    This class is not thread-safe. Synchronizations (if wanted) are user's reponsability.

    Since:
    2.0
    Author:
    Martin Desruisseaux (IRD)
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected Set<B> base
      The base set whose values are derived from.
    • Constructor Summary

      Constructors 
      Constructor Description
      DerivedSet​(Set<B> base, Class<E> derivedType)
      Creates a new derived set from the specified base set.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      boolean add​(E element)
      Ensures that this set contains the specified element.
      protected abstract E baseToDerived​(B element)
      Transforms a value in the base set to a value in this set.
      boolean contains​(Object element)
      Returns true if this set contains the specified element.
      protected abstract B derivedToBase​(E element)
      Transforms a value in this set to a value in the base set.
      Class<E> getElementType()
      Returns the derived element type.
      boolean isEmpty()
      Returns true if this set contains no elements.
      Iterator<E> iterator()
      Returns an iterator over the elements contained in this set.
      boolean remove​(Object element)
      Removes a single instance of the specified element from this set.
      int size()
      Returns the number of elements in this set.
      • Methods inherited from class AbstractSet

        equals, hashCode, removeAll
      • Methods inherited from class AbstractCollection

        addAll, clear, containsAll, retainAll, toArray, toArray, toString
      • Methods inherited from class Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface Collection

        parallelStream, removeIf, stream, toArray
      • Methods inherited from interface Iterable

        forEach
      • Methods inherited from interface Set

        addAll, clear, containsAll, retainAll, spliterator, toArray, toArray
    • Constructor Detail

      • DerivedSet

        public DerivedSet​(Set<B> base,
                          Class<E> derivedType)
        Creates a new derived set from the specified base set.
        Parameters:
        base - The base set.
        derivedType - The type of elements in this derived set.
        Since:
        2.5
    • Method Detail

      • getElementType

        public Class<E> getElementType()
        Returns the derived element type.
        Specified by:
        getElementType in interface CheckedCollection<B>
        Returns:
        The element type.
        Since:
        2.5
      • baseToDerived

        protected abstract E baseToDerived​(B element)
        Transforms a value in the base set to a value in this set. If there is no mapping in the derived set for the specified element, then this method returns null.
        Parameters:
        element - A value in the base set.
        Returns:
        The value that this view should contains instead of element, or null.
      • derivedToBase

        protected abstract B derivedToBase​(E element)
        Transforms a value in this set to a value in the base set.
        Parameters:
        element - A value in this set.
        Returns:
        The value stored in the base set.
      • iterator

        public Iterator<E> iterator()
        Returns an iterator over the elements contained in this set. The iterator will invokes baseToDerived(B) for each element.
        Specified by:
        iterator in interface Collection<B>
        Specified by:
        iterator in interface Iterable<B>
        Specified by:
        iterator in interface Set<B>
        Specified by:
        iterator in class AbstractCollection<E>
        Returns:
        an iterator over the elements contained in this set.
      • size

        public int size()
        Returns the number of elements in this set. The default implementation counts the number of elements returned by the iterator.
        Specified by:
        size in interface Collection<B>
        Specified by:
        size in interface Set<B>
        Specified by:
        size in class AbstractCollection<E>
        Returns:
        the number of elements in this set.
      • isEmpty

        public boolean isEmpty()
        Returns true if this set contains no elements.
        Specified by:
        isEmpty in interface Collection<B>
        Specified by:
        isEmpty in interface Set<B>
        Overrides:
        isEmpty in class AbstractCollection<E>
        Returns:
        true if this set contains no elements.
      • contains

        public boolean contains​(Object element)
        Returns true if this set contains the specified element. The default implementation invokes base.contains(derivedToBase(element)) .
        Specified by:
        contains in interface Collection<B>
        Specified by:
        contains in interface Set<B>
        Overrides:
        contains in class AbstractCollection<E>
        Parameters:
        element - object to be checked for containment in this set.
        Returns:
        true if this set contains the specified element.
      • add

        public boolean add​(E element)
                    throws UnsupportedOperationException
        Ensures that this set contains the specified element. The default implementation invokes base.add(derivedToBase(element)).
        Specified by:
        add in interface Collection<B>
        Specified by:
        add in interface Set<B>
        Overrides:
        add in class AbstractCollection<E>
        Parameters:
        element - element whose presence in this set is to be ensured.
        Returns:
        true if the set changed as a result of the call.
        Throws:
        UnsupportedOperationException - if the base set doesn't supports the add operation.
      • remove

        public boolean remove​(Object element)
                       throws UnsupportedOperationException
        Removes a single instance of the specified element from this set. The default implementation invokes base.remove(derivedToBase(element)) .
        Specified by:
        remove in interface Collection<B>
        Specified by:
        remove in interface Set<B>
        Overrides:
        remove in class AbstractCollection<E>
        Parameters:
        element - element to be removed from this set, if present.
        Returns:
        true if the set contained the specified element.
        Throws:
        UnsupportedOperationException - if the base set doesn't supports the remove operation.