package tc.oc.commons.core.collection; import java.util.function.ObjIntConsumer; /** * Can be used as a static helper, or as a mixin. */ public interface IterableHelper<E> extends Iterable<E> { default boolean containsIdentity(Object object) { return containsIdentity(this, object); } static boolean containsIdentity(Iterable<?> iterable, Object object) { final int id = System.identityHashCode(object); for(Object e : iterable) { if(id == System.identityHashCode(e)) { return true; } } return false; } default void forEachIndexed(ObjIntConsumer<E> consumer) { forEachIndexed(this, consumer); } static <E> void forEachIndexed(Iterable<E> iterable, ObjIntConsumer<E> consumer) { int i = 0; for(E e : iterable) { consumer.accept(e, i++); } } }