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