View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements. See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache license, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License. You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the license for the specific language governing permissions and
15   * limitations under the license.
16   */
17  package org.apache.logging.log4j.util;
18  
19  /**
20   * An extension of {@code ReadOnlyStringMap} that imposes a total ordering on its keys.
21   * The map is ordered according to the natural ordering of its keys. This order is reflected when
22   * {@link #forEach(BiConsumer) consuming} the key-value pairs with a {@link BiConsumer} or a {@link TriConsumer}.
23   * <p>
24   * This interface views all key-value pairs as a sequence ordered by key, and allows
25   * keys and values to be accessed by their index in the sequence.
26   * </p>
27   *
28   * @see ReadOnlyStringMap
29   * @since 2.8
30   */
31  public interface IndexedReadOnlyStringMap extends ReadOnlyStringMap {
32  
33      /**
34       * Viewing all key-value pairs as a sequence sorted by key, this method returns the key at the specified index,
35       * or {@code null} if the specified index is less than zero or greater or equal to the size of this collection.
36       *
37       * @param index the index of the key to return
38       * @return the key at the specified index or {@code null}
39       */
40      String getKeyAt(final int index);
41  
42      /**
43       * Viewing all key-value pairs as a sequence sorted by key, this method returns the value at the specified index,
44       * or {@code null} if the specified index is less than zero or greater or equal to the size of this collection.
45       *
46       * @param index the index of the value to return
47       * @return the value at the specified index or {@code null}
48       */
49      <V> V getValueAt(final int index);
50  
51      /**
52       * Viewing all key-value pairs as a sequence sorted by key, this method returns the index of the specified key in
53       * that sequence. If the specified key is not found, this method returns {@code (-(insertion point) - 1)}.
54       *
55       * @param key the key whose index in the ordered sequence of keys to return
56       * @return the index of the specified key or {@code (-(insertion point) - 1)} if the key is not found.
57       *          The insertion point is defined as the point at which the key would be inserted into the array:
58       *          the index of the first element in the range greater than the key, or {@code size()} if all elements
59       *          are less than the specified key. Note that this guarantees that the return value will be &gt;= 0
60       *          if and only if the key is found.
61       */
62      int indexOfKey(final String key);
63  }