/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is * available at www.apache.org/licenses/LICENSE-2.0 * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied, as more fully set forth in the License. * * See the NOTICE file distributed with this work for information regarding copyright ownership. */ package alluxio.collections; import java.util.Iterator; import java.util.Set; /** * An interface representing an index for {@link IndexedSet}, each index for this set must * implement the interface to define how to get the value of the field chosen as the index. Users * must use the same instance of the implementation of this interface as the parameter in all * methods of {@link IndexedSet} to represent the same index. * * @param <T> type of objects in {@link IndexedSet} */ public interface FieldIndex<T> extends Iterable<T> { /** * Adds an object o to the index. * * @param o the object to add to the index * @return true if object is added successfully, false otherwise */ boolean add(T o); /** * Removes the object o from the index. * * @param o the object to remove from index * @return whether the specified element was in the index */ boolean remove(T o); /** * Removes all the entries in this index. */ void clear(); /** * Returns whether there is an object with the specified index field value in the set. * * @param fieldValue the field value to be satisfied * @return true if there is one such object, otherwise false */ boolean containsField(Object fieldValue); /** * Returns whether there is an object in the set. * * @param o the object to be checked * @return true if there is one such object, otherwise false */ boolean containsObject(T o); /** * Gets a subset of objects with the specified field value. If there is no object with * the specified field value, an empty set is returned. * * @param value the field value to be satisfied * @return the set of objects or an empty set if no such object exists */ Set<T> getByField(Object value); /** * Gets an object from the set of objects with the specified field value. * * @param value the field value to be satisfied * @return the object or null if there is no such object */ T getFirst(Object value); /** * Returns an iterator over the elements in this index. The elements are returned in no particular * order. * * Note that the behavior of the iterator is unspecified if the underlying collection is modified * while a thread is going through the iterator. * * @return an iterator over the elements in this {@link FieldIndex} */ Iterator<T> iterator(); /** * @return the number of objects in this index set */ int size(); }