org.apache.solr.common.util

## Class NamedList<T>

- java.lang.Object
- - org.apache.solr.common.util.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

### Nested Class Summary

Nested Classes
`static class` `NamedList.NamedListEntry<T>` Helper class implementing Map.Entry<String, T> to store the key-value relationship in NamedList (the keys of which are String-s)

### Field Summary

Fields
`protected List<Object>` `nvPairs`

### Constructor Summary

Constructors
Constructor and Description
`NamedList()` Creates an empty instance
`NamedList(int sz)`
`NamedList(List<Object> nameValuePairs)` Deprecated. Use `NamedList(java.util.Map.Entry[])` for the NamedList instantiation
`NamedList(Map.Entry<String,? extends T>[] nameValuePairs)` Creates a NamedList instance containing the "name,value" pairs contained in the Entry[].
`NamedList(Map<String,? extends T> nameValueMap)` Creates a NamedList instance containing the "name,value" pairs contained in the Map.

### Method Summary

Methods
`void` `add(String name, T val)` Adds a name/value pair to the end of the list.
`boolean` `addAll(Map<String,T> args)` Iterates over the Map and sequentially adds its key/value pairs
`boolean` `addAll(NamedList<T> nl)` Appends the elements of the given NamedList to this one.
`Map` `asMap(int maxDepth)`
`void` `clear()`
`NamedList<T>` `clone()` Makes a shallow copy of the named list.
`boolean` `equals(Object obj)`
`Object` `findRecursive(String... args)` Recursively parses the NamedList structure to arrive at a specific element.
`T` `get(String name)` Gets the value for the first instance of the specified name found.
`T` `get(String name, int start)` Gets the value for the first instance of the specified name found starting at the specified index.
`List<T>` `getAll(String name)` Gets the values for the the specified name
`Boolean` `getBooleanArg(String name)` Used for getting a boolean argument from a NamedList object.
`NamedList` `getImmutableCopy()`
`String` `getName(int idx)` The name of the pair at the specified List index
`T` `getVal(int idx)` The value of the pair at the specified List index
`int` `hashCode()`
`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.
`Iterator<Map.Entry<String,T>>` `iterator()` Support the Iterable interface
`T` `remove(int idx)` Removes the name/value pair at the specified index.
`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).
`List<T>` `removeAll(String name)` Removes and returns all values for the specified name.
`Boolean` `removeBooleanArg(String name)` Used for getting a boolean argument from a NamedList object.
`Collection<String>` `removeConfigArgs(String name)` Used for getting one or many arguments from NamedList objects that hold configuration parameters.
`void` `setName(int idx, String name)` Modifies the name of the pair at the specified index.
`T` `setVal(int idx, T val)` Modifies the value of the pair at the specified index.
`int` `size()` The total number of name/value pairs
`String` `toString()`

### Methods inherited from class java.lang.Object

`finalize, getClass, notify, notifyAll, wait, wait, wait`

### Field Detail

#### nvPairs

    protected final List<Object> nvPairs

### Constructor Detail

#### NamedList

    public NamedList()

Creates an empty instance

#### NamedList

    public NamedList(int sz)

#### 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<T> getAll(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.

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`

#### getImmutableCopy

    public NamedList getImmutableCopy()

#### 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.

#### clone

    public NamedList<T> clone()

Makes a shallow copy of the named list.

Overrides:
  `clone` in class `Object`

#### iterator

    public Iterator<Map.Entry<String,T>> iterator()

Support the Iterable interface

Specified by:
  `iterator` in interface `Iterable<Map.Entry<String,T>>`

#### 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<T> removeAll(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<String> removeConfigArgs(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()

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `Object`

#### equals

    public boolean equals(Object obj)

Overrides:
  `equals` in class `Object`