Class IndexedCollection<K,​C>

  • Type Parameters:
    K - the type of object in the index.
    C - the type of object in the collection.
    All Implemented Interfaces:
    java.io.Serializable, java.lang.Iterable<C>, java.util.Collection<C>

    public class IndexedCollection<K,​C>
    extends AbstractCollectionDecorator<C>
    An IndexedCollection is a Map-like view onto a Collection. It accepts a keyTransformer to define how the keys are converted from the values.

    Modifications made to this decorator modify the index as well as the decorated Collection. However, modifications to the underlying Collection will not update the index and it will get out of sync.

    If modification of the decorated Collection is unavoidable, then a call to reindex() will update the index to the current contents of the Collection.

    Since:
    4.0
    See Also:
    Serialized Form
    • Constructor Detail

      • IndexedCollection

        public IndexedCollection​(java.util.Collection<C> coll,
                                 Transformer<C,​K> keyTransformer,
                                 MultiMap<K,​C> map,
                                 boolean uniqueIndex)
        Parameters:
        coll - decorated Collection
        keyTransformer - Transformer for generating index keys
        map - map to use as index
        uniqueIndex - if the index shall enforce uniqueness of index keys
    • Method Detail

      • uniqueIndexedCollection

        public static <K,​C> IndexedCollection<K,​C> uniqueIndexedCollection​(java.util.Collection<C> coll,
                                                                                       Transformer<C,​K> keyTransformer)
        Create an IndexedCollection for a unique index.

        If an element is added, which maps to an existing key, an IllegalArgumentException will be thrown.

        Type Parameters:
        K - the index object type.
        C - the collection type.
        Parameters:
        coll - the decorated Collection.
        keyTransformer - the Transformer for generating index keys.
        Returns:
        the created IndexedCollection.
      • nonUniqueIndexedCollection

        public static <K,​C> IndexedCollection<K,​C> nonUniqueIndexedCollection​(java.util.Collection<C> coll,
                                                                                          Transformer<C,​K> keyTransformer)
        Create an IndexedCollection for a non-unique index.
        Type Parameters:
        K - the index object type.
        C - the collection type.
        Parameters:
        coll - the decorated Collection.
        keyTransformer - the Transformer for generating index keys.
        Returns:
        the created IndexedCollection.
      • add

        public boolean add​(C object)
        Specified by:
        add in interface java.util.Collection<K>
        Overrides:
        add in class AbstractCollectionDecorator<C>
        Throws:
        java.lang.IllegalArgumentException - if the object maps to an existing key and the index enforces a uniqueness constraint
      • addAll

        public boolean addAll​(java.util.Collection<? extends C> coll)
        Specified by:
        addAll in interface java.util.Collection<K>
        Overrides:
        addAll in class AbstractCollectionDecorator<C>
      • contains

        public boolean contains​(java.lang.Object object)

        Note: uses the index for fast lookup

        Specified by:
        contains in interface java.util.Collection<K>
        Overrides:
        contains in class AbstractCollectionDecorator<C>
      • containsAll

        public boolean containsAll​(java.util.Collection<?> coll)

        Note: uses the index for fast lookup

        Specified by:
        containsAll in interface java.util.Collection<K>
        Overrides:
        containsAll in class AbstractCollectionDecorator<C>
      • get

        public C get​(K key)
        Get the element associated with the given key.

        In case of a non-unique index, this method will return the first value associated with the given key. To retrieve all elements associated with a key, use values(Object).

        Parameters:
        key - key to look up
        Returns:
        element found
        See Also:
        values(Object)
      • values

        public java.util.Collection<C> values​(K key)
        Get all elements associated with the given key.
        Parameters:
        key - key to look up
        Returns:
        a collection of elements found, or null if contains(key) == false
      • reindex

        public void reindex()
        Clears the index and re-indexes the entire decorated Collection.
      • remove

        public boolean remove​(java.lang.Object object)
        Specified by:
        remove in interface java.util.Collection<K>
        Overrides:
        remove in class AbstractCollectionDecorator<C>
      • removeIf

        public boolean removeIf​(java.util.function.Predicate<? super C> filter)
        Specified by:
        removeIf in interface java.util.Collection<K>
        Overrides:
        removeIf in class AbstractCollectionDecorator<C>
        Since:
        4.4
      • removeAll

        public boolean removeAll​(java.util.Collection<?> coll)
        Specified by:
        removeAll in interface java.util.Collection<K>
        Overrides:
        removeAll in class AbstractCollectionDecorator<C>
      • retainAll

        public boolean retainAll​(java.util.Collection<?> coll)
        Specified by:
        retainAll in interface java.util.Collection<K>
        Overrides:
        retainAll in class AbstractCollectionDecorator<C>