package com.revolsys.util;
import java.util.Iterator;
import java.util.function.Consumer;
import java.util.function.Predicate;
import com.revolsys.collection.iterator.CancelIterable;
import com.revolsys.collection.iterator.Iterators;
public interface Cancellable {
default <V> Iterable<V> cancellable(final Iterable<V> iterable) {
return new CancelIterable<>(this, iterable);
}
default <V> Iterable<V> cancellable(final Iterable<V> iterable, final Predicate<V> filter) {
final Iterable<V> filteredIterator = Iterators.filter(iterable, filter);
return new CancelIterable<>(this, filteredIterator);
}
default <V> Iterator<V> cancellable(final Iterator<V> iterator) {
return new CancelIterable<>(this, iterator);
}
default <V> Iterator<V> cancellable(final Iterator<V> iterator, final Predicate<V> filter) {
final Iterator<V> filteredIterator = Iterators.filter(iterator, filter);
return new CancelIterable<>(this, filteredIterator);
}
/**
*
* @param iterable
* @param action
* @return true if cancelled, false otherwise
*/
default <V> boolean forCancel(final Iterable<V> iterable, final Consumer<V> action) {
for (final V value : iterable) {
if (isCancelled()) {
return true;
} else {
action.accept(value);
}
}
return isCancelled();
}
boolean isCancelled();
}