HistoricalList.java

  1. package org.opentrafficsim.core.perception.collections;

  2. import java.util.Arrays;
  3. import java.util.Comparator;
  4. import java.util.List;
  5. import java.util.Objects;
  6. import java.util.function.UnaryOperator;

  7. import org.djunits.value.vdouble.scalar.Time;

  8. /**
  9.  * Interface for historical lists.
  10.  * <p>
  11.  * Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  12.  * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
  13.  * <p>
  14.  * @version $Revision$, $LastChangedDate$, by $Author$, initial version 3 feb. 2018 <br>
  15.  * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
  16.  * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
  17.  * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
  18.  * @param <E> element type
  19.  */
  20. public interface HistoricalList<E> extends HistoricalCollection<E>, List<E>
  21. {

  22.     /**
  23.      * Returns the current list.
  24.      * @return List; current list
  25.      */
  26.     @Override
  27.     List<E> get();

  28.     /**
  29.      * Returns a past list.
  30.      * @param time Time; time to obtain the list at
  31.      * @return List; past list
  32.      */
  33.     @Override
  34.     List<E> get(Time time);

  35.     /** {@inheritDoc} */
  36.     @Override
  37.     default void replaceAll(final UnaryOperator<E> operator)
  38.     {
  39.         // super uses ListIterator.set(E), which is not supported
  40.         Objects.requireNonNull(operator);
  41.         for (int i = 0; i < size(); i++)
  42.         {
  43.             set(i, operator.apply(get(i)));
  44.         }
  45.     }

  46.     /** {@inheritDoc} */
  47.     @SuppressWarnings({"rawtypes", "unchecked"})
  48.     @Override
  49.     default void sort(final Comparator<? super E> c)
  50.     {
  51.         // super uses ListIterator.set(E), which is not supported
  52.         Object[] a = this.toArray();
  53.         Arrays.sort(a, (Comparator) c);
  54.         for (int i = 0; i < a.length; i++)
  55.         {
  56.             set(i, (E) a[i]);
  57.         }
  58.     }

  59. }