NotNullIterable.java
package eu.javaexperience.collection.iterator;
import java.util.Iterator;
public class NotNullIterable
{
public static <T> Iterable<T> whitoutNulls(final Iterable<T> iterable)
{
if(iterable == null)
return iterable;
return new Iterable<T>()
{
@Override
public Iterator<T> iterator()
{
return new Iterator<T>()
{
Iterator<T> it = iterable.iterator();
T last = null;
boolean getted = false;
{
getNext();
}
@Override
public boolean hasNext()
{
return last != null;
}
private T getNext()
{
if(!it.hasNext())
{
last = null;
return null;
}
while(it.hasNext() && (last = it.next()) == null);
getted = true;
return last;
}
@Override
public T next()
{
getted = false;
T old = last;
getNext();
return old;
}
@Override
public void remove()
{
it.remove();
}
};
}
};
}
public static <T> Iterable<T> whitoutNulls(final T[] array)
{
return whitoutNulls(new Iterable<T>()
{
@Override
public Iterator<T> iterator()
{
return new ArrayIterator(array);
}
});
}
}