Class ExtractorFilter<T,​E>

    • Constructor Detail

      • ExtractorFilter

        public ExtractorFilter()
        Default constructor (necessary for the ExternalizableLite interface).
      • ExtractorFilter

        public ExtractorFilter​(ValueExtractor<? super T,​? extends E> extractor)
        Construct a ExtractorFilter for a given ValueExtractor.
        Parameters:
        extractor - the ValueExtractor to use by this filter
      • ExtractorFilter

        public ExtractorFilter​(String sMethod)
        Construct an ExtractorFilter for a given method name.
        Parameters:
        sMethod - a method name to make a ReflectionExtractor for; this parameter can also be a dot-delimited sequence of method names which would result in an ExtractorFilter based on the ChainedExtractor that is based on an array of corresponding ReflectionExtractor objects
    • Method Detail

      • evaluate

        public boolean evaluate​(T target)
        Apply the test to the input argument.
        Specified by:
        evaluate in interface Filter<T>
        Parameters:
        target - the input argument to evaluate
        Returns:
        true if the input argument matches the filter, otherwise false
      • evaluateEntry

        public boolean evaluateEntry​(Map.Entry<?,​? extends T> entry)
        Apply the test to a Map Entry.
        Specified by:
        evaluateEntry in interface EntryFilter<T,​E>
        Parameters:
        entry - the Map Entry to evaluate; never null
        Returns:
        true if the test passes, false otherwise
      • evaluateExtracted

        protected abstract boolean evaluateExtracted​(E extracted)
        Evaluate the specified extracted value.
        Parameters:
        extracted - an extracted value to evaluate
        Returns:
        true iff the test passes
      • extract

        protected E extract​(T o)
        Get the result of ValueExtractor invocation.
        Parameters:
        o - the object on which to invoke the ValueExtractor; must not be null
        Returns:
        the result of the method invocation
        Throws:
        WrapperException - if this ValueExtractor encounters an exception in the course of extracting the value
      • getValueExtractor

        public ValueExtractor<? super T,​? extends E> getValueExtractor()
        Obtain the ValueExtractor used by this filter.
        Returns:
        the ValueExtractor used by this filter
      • calculateEffectiveness

        public int calculateEffectiveness​(Map mapIndexes,
                                          Set setKeys)
        Given a Map of available indexes, determine if this IndexAwareFilter can use any of the indexes to assist in its processing, and if so, determine how effective the use of that index would be.

        The returned value is an effectiveness estimate of how well this filter can use the specified indexes to filter the specified keys. An operation that requires no more than a single access to the index content (i.e. Equals, NotEquals) has an effectiveness of one. Evaluation of a single entry is assumed to have an effectiveness that depends on the index implementation and is usually measured as a constant number of the single operations. This number is referred to as evaluation cost.

        If the effectiveness of a filter evaluates to a number larger than the keySet.size() * <evaluation cost> then a user could avoid using the index and iterate through the keySet calling evaluate rather then applyIndex.

        Specified by:
        calculateEffectiveness in interface IndexAwareFilter<T,​E>
        Parameters:
        mapIndexes - the available MapIndex objects keyed by the related ValueExtractor; read-only
        setKeys - the set of keys that will be filtered; read-only
        Returns:
        an effectiveness estimate of how well this filter can use the specified indexes to filter the specified keys
      • applyIndex

        public Filter applyIndex​(Map mapIndexes,
                                 Set setKeys)
        Filter remaining keys using a Map of available indexes.

        The filter is responsible for removing all keys from the passed set of keys that the applicable indexes can prove should be filtered. If the filter does not fully evaluate the remaining keys using just the index information, it must return a filter (which may be an EntryFilter) that can complete the task using an iterating implementation. If, on the other hand, the filter does fully evaluate the remaining keys using just the index information, then it should return null to indicate that no further filtering is necessary.

        Specified by:
        applyIndex in interface IndexAwareFilter<T,​E>
        Parameters:
        mapIndexes - the available MapIndex objects keyed by the related ValueExtractor; read-only
        setKeys - the mutable set of keys that remain to be filtered
        Returns:
        a Filter object (which may be an EntryFilter) that can be used to process the remaining keys, or null if no additional filter processing is necessary
      • calculateIteratorEffectiveness

        public static int calculateIteratorEffectiveness​(int cKeys)
        Helper method to calculate effectiveness (or rather ineffectiveness) of a simple iteration against a key set that has to be performed due to an absence of corresponding index.
        Parameters:
        cKeys - the number of keys to iterate through
        Returns:
        an effectiveness estimate
      • readExternal

        public void readExternal​(DataInput in)
                          throws IOException
        Description copied from interface: ExternalizableLite
        Restore the contents of this object by loading the object's state from the passed DataInput object.
        Specified by:
        readExternal in interface ExternalizableLite
        Parameters:
        in - the DataInput stream to read data from in order to restore the state of this object
        Throws:
        IOException - if an I/O exception occurs
        NotActiveException - if the object is not in its initial state, and therefore cannot be deserialized into
      • writeExternal

        public void writeExternal​(DataOutput out)
                           throws IOException
        Description copied from interface: ExternalizableLite
        Save the contents of this object by storing the object's state into the passed DataOutput object.
        Specified by:
        writeExternal in interface ExternalizableLite
        Parameters:
        out - the DataOutput stream to write the state of this object to
        Throws:
        IOException - if an I/O exception occurs
      • readExternal

        public void readExternal​(PofReader in)
                          throws IOException
        Description copied from interface: PortableObject
        Restore the contents of a user type instance by reading its state using the specified PofReader object.
        Specified by:
        readExternal in interface PortableObject
        Parameters:
        in - the PofReader from which to read the object's state
        Throws:
        IOException - if an I/O error occurs
      • writeExternal

        public void writeExternal​(PofWriter out)
                           throws IOException
        Description copied from interface: PortableObject
        Save the contents of a POF user type instance by writing its state using the specified PofWriter object.
        Specified by:
        writeExternal in interface PortableObject
        Parameters:
        out - the PofWriter to which to write the object's state
        Throws:
        IOException - if an I/O error occurs
      • ensureSafeSet

        protected static Set ensureSafeSet​(Set set)
        Return a non-null Set.
        Parameters:
        set - the set to ensure
        Returns:
        the safe set