org.apache.solr.common.util

Class NamedList<T>

  • All Implemented Interfaces:
    Serializable, Cloneable, Iterable<Map.Entry<String,T>>
    Direct Known Subclasses:
    CloudSolrClient.RouteResponse, SimpleOrderedMap


    public class NamedList<T>
    extends Object
    implements Cloneable, Serializable, Iterable<Map.Entry<String,T>>
    A simple container class for modeling an ordered list of name/value pairs.

    Unlike Maps:

    • Names may be repeated
    • Order of elements is maintained
    • Elements may be accessed by numeric index
    • Names and Values can both be null

    A NamedList provides fast access by element number, but not by name.

    When a NamedList is serialized, order is considered more important than access by key, so ResponseWriters that output to a format such as JSON will normally choose a data structure that allows order to be easily preserved in various clients (i.e. not a straight map). If access by key is more important for serialization, see SimpleOrderedMap, or simply use a regular Map

    See Also:
    Serialized Form
    • Constructor Detail

      • NamedList

        public NamedList()
        Creates an empty instance
      • NamedList

        public NamedList(Map.Entry<String,? extends T>[] nameValuePairs)
        Creates a NamedList instance containing the "name,value" pairs contained in the Entry[].

        Modifying the contents of the Entry[] after calling this constructor may change the NamedList (in future versions of Solr), but this is not guaranteed and should not be relied upon. To modify the NamedList, refer to add(String, Object) or remove(String).

        Parameters:
        nameValuePairs - the name value pairs
      • NamedList

        public NamedList(Map<String,? extends T> nameValueMap)
        Creates a NamedList instance containing the "name,value" pairs contained in the Map.

        Modifying the contents of the Map after calling this constructor may change the NamedList (in future versions of Solr), but this is not guaranteed and should not be relied upon. To modify the NamedList, refer to add(String, Object) or remove(String).

        Parameters:
        nameValueMap - the name value pairs
      • NamedList

        @Deprecated
        public NamedList(List<Object> nameValuePairs)
        Deprecated. Use NamedList(java.util.Map.Entry[]) for the NamedList instantiation
        Creates an instance backed by an explicitly specified list of pairwise names/values.

        When using this constructor, runtime type safety is only guaranteed if all even numbered elements of the input list are of type "T".

        Parameters:
        nameValuePairs - underlying List which should be used to implement a NamedList
    • Method Detail

      • size

        public int size()
        The total number of name/value pairs
      • getName

        public String getName(int idx)
        The name of the pair at the specified List index
        Returns:
        null if no name exists
      • getVal

        public T getVal(int idx)
        The value of the pair at the specified List index
        Returns:
        may be null
      • add

        public void add(String name,
                        T val)
        Adds a name/value pair to the end of the list.
      • setName

        public void setName(int idx,
                            String name)
        Modifies the name of the pair at the specified index.
      • setVal

        public T setVal(int idx,
                        T val)
        Modifies the value of the pair at the specified index.
        Returns:
        the value that used to be at index
      • remove

        public T remove(int idx)
        Removes the name/value pair at the specified index.
        Returns:
        the value at the index removed
      • indexOf

        public int indexOf(String name,
                           int start)
        Scans the list sequentially beginning at the specified index and returns the index of the first pair with the specified name.
        Parameters:
        name - name to look for, may be null
        start - index to begin searching from
        Returns:
        The index of the first matching pair, -1 if no match
      • get

        public T get(String name)
        Gets the value for the first instance of the specified name found.

        NOTE: this runs in linear time (it scans starting at the beginning of the list until it finds the first pair with the specified name).

        Returns:
        null if not found or if the value stored was null.
        See Also:
        indexOf(java.lang.String, int), get(String,int)
      • get

        public T get(String name,
                     int start)
        Gets the value for the first instance of the specified name found starting at the specified index.

        NOTE: this runs in linear time (it scans starting at the specified position until it finds the first pair with the specified name).

        Returns:
        null if not found or if the value stored was null.
        See Also:
        indexOf(java.lang.String, int)
      • getAll

        public List<TgetAll(String name)
        Gets the values for the the specified name
        Parameters:
        name - Name
        Returns:
        List of values
      • findRecursive

        public Object findRecursive(String... args)
        Recursively parses the NamedList structure to arrive at a specific element. As you descend the NamedList tree, the last element can be any type, including NamedList, but the previous elements MUST be NamedList objects themselves. A null value is returned if the indicated hierarchy doesn't exist, but NamedList allows null values so that could be the actual value at the end of the path. This method is particularly useful for parsing the response from Solr's /admin/mbeans handler, but it also works for any complex structure. Explicitly casting the return value is recommended. An even safer option is to accept the return value as an object and then check its type. Usage examples: String coreName = (String) response.findRecursive ("solr-mbeans", "CORE", "core", "stats", "coreName"); long numDoc = (long) response.findRecursive ("solr-mbeans", "CORE", "searcher", "stats", "numDocs");
        Parameters:
        args - One or more strings specifying the tree to navigate.
        Returns:
        the last entry in the given path hierarchy, null if not found.
      • asMap

        public Map asMap(int maxDepth)
      • addAll

        public boolean addAll(Map<String,T> args)
        Iterates over the Map and sequentially adds its key/value pairs
      • addAll

        public boolean addAll(NamedList<T> nl)
        Appends the elements of the given NamedList to this one.
      • remove

        public T remove(String name)
        NOTE: this runs in linear time (it scans starting at the beginning of the list until it finds the first pair with the specified name).
      • removeAll

        public List<TremoveAll(String name)
        Removes and returns all values for the specified name. Returns null if no matches found. This method will return all matching objects, regardless of data type. If you are parsing Solr config options, the removeConfigArgs(String) or removeBooleanArg(String) methods will probably work better.
        Parameters:
        name - Name
        Returns:
        List of values
      • removeBooleanArg

        public Boolean removeBooleanArg(String name)
        Used for getting a boolean argument from a NamedList object. If the name is not present, returns null. If there is more than one value with that name, or if the value found is not a Boolean or a String, throws an exception. If there is only one value present and it is a Boolean or a String, the value is removed and returned as a Boolean. If an exception is thrown, the NamedList is not modified. See removeAll(String) and removeConfigArgs(String) for additional ways of gathering configuration information from a NamedList.
        Parameters:
        name - The key to look up in the NamedList.
        Returns:
        The boolean value found.
        Throws:
        SolrException - If multiple values are found for the name or the value found is not a Boolean or a String.
      • getBooleanArg

        public Boolean getBooleanArg(String name)
        Used for getting a boolean argument from a NamedList object. If the name is not present, returns null. If there is more than one value with that name, or if the value found is not a Boolean or a String, throws an exception. If there is only one value present and it is a Boolean or a String, the value is returned as a Boolean. The NamedList is not modified. See remove(String), removeAll(String) and removeConfigArgs(String) for additional ways of gathering configuration information from a NamedList.
        Parameters:
        name - The key to look up in the NamedList.
        Returns:
        The boolean value found.
        Throws:
        SolrException - If multiple values are found for the name or the value found is not a Boolean or a String.
      • removeConfigArgs

        public Collection<StringremoveConfigArgs(String name)
                                            throws SolrException
        Used for getting one or many arguments from NamedList objects that hold configuration parameters. Finds all entries in the NamedList that match the given name. If they are all strings or arrays of strings, remove them from the NamedList and return the individual elements as a Collection. Parameter order will be preserved if the returned collection is handled as an ArrayList. Throws SolrException if any of the values associated with the name are not strings or arrays of strings. If exception is thrown, the NamedList is not modified. Returns an empty collection if no matches found. If you need to remove and retrieve all matching items from the NamedList regardless of data type, use removeAll(String) instead. The removeBooleanArg(String) method can be used for retrieving a boolean argument.
        Parameters:
        name - The key to look up in the NamedList.
        Returns:
        A collection of the values found.
        Throws:
        SolrException - If values are found for the input key that are not strings or arrays of strings.
      • clear

        public void clear()