/** * Removes up to N elements from the given iterable * * @param <I> * @param iterable * @param amountOfElements Non negative * @return the given iterable */ @NonNull public static <I extends Iterable<?>> I remove( @NonNull I iterable, @NotNegative int amountOfElements) { Iterator<?> iter = iterable.iterator(); for (int i = 0; i < amountOfElements && iter.hasNext(); i++) iter.remove(); return iterable; }
/** * Removes from the given iterable all the elements that evaluate to true * * @param iterable * @param predicate * @param <T> * @param <I> * @return the given iterable */ @NonNull public static <T, I extends Iterable<T>> I removeAll( @NonNull I iterable, @NonNull Evaluable<? super T> predicate) { for (Iterator<T> iter = iterable.iterator(); iter.hasNext(); ) if (predicate.eval(iter.next())) iter.remove(); return iterable; }