package org.hivedb.util.functional;
import java.util.*;
public class Atom {
public static<T> T getFirst(Iterable<? extends T> iterable) throws Exception
{
for (T item : iterable)
return item;
throw new Exception("Iterable has no items");
}
public static<T> T getFirstOrThrow(Iterable<? extends T> iterable)
{
for (T item : iterable)
return item;
throw new NoSuchElementException("Iterable has no items");
}
public static<T> T getFirstOrNull(Iterable<? extends T> iterable)
{
for (T item : iterable)
return item;
return null;
}
public static Object getFirstOrDefault(Iterable<?> iterable, Object defaultItem)
{
for (Object item : iterable)
return item;
return defaultItem;
}
public static Class<?> getClassFirstOrDefault(Iterable<?> iterable, Class<?> defaultClass)
{
for (Object item : iterable)
return item.getClass();
return defaultClass;
}
public static<T> Collection<T> getRest(Iterable<? extends T> iterable) throws Exception
{
List<T> results = new ArrayList<T>();
for (T item: iterable)
results.add(item);
if (results.size() == 0)
throw new Exception("Iterable has no items");
results.remove(0);
return results;
}
public static<T> Collection<T> getRestOrThrow(Iterable<? extends T> iterable) {
try {
return getRest(iterable);
}
catch (Exception e) { throw new NoSuchElementException(e.getMessage()); }
}
public static<T> T getFirst(T[] array) throws Exception
{
if(array.length == 0)
throw new Exception("Array has no items");
else
return array[0];
}
public static<T> T getFirstOrThrow(T[] array)
{
if(array.length == 0)
throw new NoSuchElementException("Array has no items");
else
return array[0];
}
public static<T> T getFirstOrNull(T[] array)
{
if(array.length == 0)
return null;
else
return array[0];
}
public static<T> T getLast(Iterable<? extends T> iterable) throws Exception
{
Iterator<? extends T> i = iterable.iterator();
T item = null;
while( i.hasNext())
item = i.next();
if( item != null)
return item;
else
throw new Exception("Iterable has no items");
}
public static<T> T getLastOrThrow(Iterable<? extends T> iterable)
{
Iterator<? extends T> i = iterable.iterator();
T item = null;
while( i.hasNext())
item = i.next();
if( item != null)
return item;
else
throw new NoSuchElementException("Iterable has no items");
}
public static<T> T getLastOrNull(Iterable<? extends T> iterable)
{
Iterator<? extends T> i = iterable.iterator();
T item = null;
while( i.hasNext())
item = i.next();
return item;
}
public static<T> T getLast(T[] array) throws Exception
{
if(array.length > 0)
return array[array.length-1];
else
throw new Exception("Array has no items");
}
public static<T> T getLastOrThrow(T[] array)
{
if(array.length > 0)
return array[array.length-1];
else
throw new NoSuchElementException("Array has no items");
}
public static<T> T getLastOrNull(T[] array)
{
if(array.length > 0)
return array[array.length-1];
else
return null;
}
}