Close

Java - How to get next or previous item from a Collection?

[Last Updated: May 21, 2018]

Java Collections Java 

Following example shows how to get next or previous item from a java.util.Collection. The flag 'circular' allows to cycle the collection indefinitely.

package com.logicbig.example;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;

public class CollectionNextPrevItem {

  public static <T> T getNext(Collection<T> collection, T target) {
      return getNext(collection, target, false);
  }

  public static <T> T getNext(Collection<T> collection, T target, final boolean circular) {
      if (collection == null) {
          return null;
      }
      Iterator<T> itr = collection.iterator();
      T first = null;
      boolean firstItr = true;
      while (itr.hasNext()) {
          T t = itr.next();
          if (circular && firstItr) {
              first = t;
              firstItr = false;
          }
          if (Objects.equals(t, target)) {
              return itr.hasNext() ? itr.next() : circular ? first : null;
          }
      }
      return null;
  }

  public static <T> T getPrevious(Collection<T> collection, T target) {
      return getPrevious(collection, target, false);
  }

  public static <T> T getPrevious(Collection<T> collection, T target, final boolean circular) {
      if (collection == null) {
          return null;
      }
      Iterator<T> itr = collection.iterator();
      T previous = null;
      boolean firstItr = true;
      while (itr.hasNext()) {
          T t = itr.next();
          if (Objects.equals(t, target)) {
              if (firstItr && circular) {
                  for (; itr.hasNext(); t = itr.next())
                      ;
                  return t;
              } else {
                  return previous;
              }
          }
          previous = t;
          firstItr = false;
      }
      return null;
  }


  public static void main(String[] args) {
      List<String> list = List.of("one", "two", "three", "four");
      String s = getNext(list, "three");
      System.out.println(s);
      s = getPrevious(list, "three");
      System.out.println(s);
      s = getNext(list, "four");
      System.out.println(s);
      s = getPrevious(list, "one");
      System.out.println(s);

      System.out.println("-- circular --");
      s = getNext(list, "four", true);
      System.out.println(s);
      s = getPrevious(list, "one", true);
      System.out.println(s);
  }
}
four
two
null
null
-- circular --
one
four

See Also